QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#882291#9708. Yuuki and a problemgsn531RE 0ms0kbC++262.1kb2025-02-04 23:21:012025-02-04 23:21:02

Judging History

This is the latest submission verdict.

  • [2025-02-04 23:21:02]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2025-02-04 23:21:01]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;

#define int long long

#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define per(i, a, b) for(int i = (a); i >= (b); --i)
#define lb(x) (x & (-x))

const int maxn = 2e5 + 5;

int n, m, a[maxn], N = 2e5;

int rt[maxn], tot;
struct tree{
    int ch[2]; int sum;
}t[maxn * 60];

inline void updt(int &x, int l, int r, int p, int v){
    if(!x) x = ++tot; t[x].sum += v;
    if(l == r) return;
    int mid = l + r >> 1;
    if(p <= mid) updt(t[x].ch[0], l, mid, p, v);
    else updt(t[x].ch[1], mid + 1, r, p, v);
}
int st[maxn], tp, stt[maxn];
inline int qryr(int l, int r, int L, int R){
    if(l >= L and r <= R){
        int sum = 0;
        rep(i, 1, tp) sum += t[st[i]].sum;
        return sum;
    }
    int mid = l + r >> 1, sum = 0;
    if(L <= mid){
        rep(i, 1, tp) stt[i] = st[i], st[i] = t[st[i]].ch[0];
        sum += qryr(l, mid, L, R);
        rep(i, 1, tp) st[i] = stt[i];
    }
    if(R > mid){
        rep(i, 1, tp) stt[i] = st[i], st[i] = t[st[i]].ch[1];
        sum += qryr(mid + 1, r, L, R);
        rep(i, 1, tp) st[i] = stt[i];
    }
    return sum;
}

inline int qry(int x, int l, int r){
    tp = 0;
    for(int i = x; i; i -= lb(i)) st[++tp] = rt[i];
    return qryr(1, N, l, r);
}

signed main(){
    ios_base::sync_with_stdio(0); cin.tie(NULL);

    cin >> n >> m;
    rep(i, 1, n) cin >> a[i];

    rep(x, 1, n){
        for(int i = x; i <= n; i += lb(i))
            updt(rt[i], 1, N, a[x], a[x]);
    }

    while(m--){
        int op, x, y; cin >> op >> x >> y;
        if(op == 1){
            for(int i = x; i <= n; i += lb(i)){
                updt(rt[i], 1, N, a[x], -a[x]);
                updt(rt[i], 1, N, y, y);
            }
            a[x] = y;
        } else{
            int ans = 1;
            while(true){
                int tmp = qry(y, 1, ans) - qry(x - 1, 1, ans);
                if(tmp >= ans) ans = tmp + 1;
                else break;
            }
            cout << ans << '\n';
        }
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Runtime Error

input:

199764 199778
133101 69413 73309 22139 46693 131970 90981 150001 6352 118276 101164 12691 168203 190853 98599 198097 86901 92688 192934 187579 47910 89959 111317 41624 197440 106737 121438 188902 106461 149886 163820 136239 14632 193976 42315 57797 87112 1001 81835 14938 143862 58531 18884 39422 746...

output:


result: