求助,全wa了
  • 板块灌水区
  • 楼主Uuuuuur_
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/7/14 16:45
  • 上次更新2023/10/27 20:22:18
查看原帖
求助,全wa了
536396
Uuuuuur_楼主2022/7/14 16:45

P1198 样例过了,不知道错在哪里

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int n = 200005;
ll m, d;
ll t;
ll maxv[1000005];
ll s;
void pushup(ll x) {
    maxv[x] = max(maxv[x << 1], maxv[x << 1 | 1]);
}
void init(ll l, ll r, ll id) {
    maxv[id] = -0x3ffffffff;
    if (l == r) {
        return ;
    }
    ll mid = (l + r) >> 1;
    init(l, mid, id << 1);
    init(mid + 1, r, id << 1 | 1); 
}
void insert(ll l, ll r, ll num, ll id) {
    if (l == r) {
        maxv[id] = num;
        return; 
    }
    ll mid = (l + r) >> 1;
    if (s <= mid) {
        insert(l, mid, num, id << 1);
    } else {
        insert
        (mid + 1, r, num, id << 1 | 1); 
    }
    pushup(id);
}
ll query(ll l, ll r, ll x, ll y, ll id) {
    if (x <= l && r <= y) {
        return maxv[id];
    } 
    ll ans = -0x3ffffffff;
    ll mid = (l + r) >> 1;
    if (x <= mid) ans = max(ans, query(l, mid, x, y, id << 1));
    if (y > mid) ans = max(ans, query(mid + 1, r, x, y, id << 1 | 1)); 
    return ans; 
} 
int main(){
    scanf("%lld%lld", &m, &d);
    init(1, n, 1);
    for (int i = 1; i <= m; i++) {
        char kong;
        scanf("%c", &kong);
        char c;
        ll num;
        scanf("%c%lld", &c, &num);
        if (c == 'A') {
            num += t;
            num %= d;
            s++;
            insert(1, m, num, 1);
        } else {
            ll ans = query(1, m, s - num + 1, m, 1);
            if (num == 0) {
                ans = 0;
            }
            printf("%lld\n", ans);  

            t = ans;
        }
    }
    return 0;
}
2022/7/14 16:45
加载中...