Submission details
Task:Lucky prefixes
Sender:Naming is (NP) Hard
Submission time:2025-11-08 12:55:37 +0200
Language:C++ (C++20)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.11 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.07 sdetails
#5ACCEPTED0.15 sdetails
#6ACCEPTED0.09 sdetails
#7ACCEPTED0.09 sdetails
#8ACCEPTED0.13 sdetails
#9ACCEPTED0.15 sdetails
#10ACCEPTED0.01 sdetails
#11ACCEPTED0.07 sdetails
#12ACCEPTED0.15 sdetails
#13ACCEPTED0.09 sdetails
#14ACCEPTED0.09 sdetails
#15ACCEPTED0.12 sdetails
#16ACCEPTED0.15 sdetails

Code

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

#ifdef LOCAL
#define D(x) {x;}
#else
#define D(x)
#endif
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x),end(x)
#define sz(x) (int) (x).size()
using ll = long long;
using pii = pair<int, int>;
using vi = vector<int>;

struct S {
    bool en = 0;
    long tot = 0;
    long mpref = 0;
};

S operator+(S a, S b) {
    if (!a.en) return b;
    if (!b.en) return a;
    return {1, a.tot + b.tot, min(a.mpref, a.tot + b.mpref)};
}

const int N = 1<<18;

S sp[2*N];

int main() {
    cin.tie(0) -> sync_with_stdio(0);
    cin.exceptions(cin.failbit);
    int n, q;
    cin >> n >> q;
    for (int i = 0; i < n; ++i) {
        int x;
        cin >> x;
        sp[N+i] = {1, x, x};
    }
    for (int i = N-1; i > 0; --i) {
        sp[i] = sp[2*i] + sp[2*i+1];
    }
    for (int qi = 0; qi < q; ++qi) {
        int t, a, b;
        cin >> t >> a >> b;
        if (t == 1) {
            int x = N+a-1;
            sp[x] = {1, b, b};
            while (x /= 2) sp[x] = sp[2*x] + sp[2*x+1];
        } else {
            a--; b--;
            a += N; b += N;
            S l{}, r{};
            while (a <= b) {
                // D(cerr << a << " " << b << endl);
                if (a&1) l = l + sp[a++];
                if (~b&1) r = sp[b--] + r;
                a /= 2; b /= 2;
            }
            // D(cerr << l.tot << " " << l.mpref << " " << r.tot << " " << r.mpref << endl);
            S tot = l + r;
            if (tot.mpref >= 0) cout << "YES\n";
            else cout << "NO\n";
        }
    }
}

Test details

Test 1

Verdict: ACCEPTED

input
6 4
3 -2 1 5 6 1
2 1 3
2 2 3
1 3 -2
...

correct output
YES
NO
NO

user output
YES
NO
NO

Test 2

Verdict: ACCEPTED

input
200000 200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 3

Verdict: ACCEPTED

input
10 10
629447384 -729045992 811583872...

correct output
YES
NO
NO
NO
NO
...

user output
YES
NO
NO
NO
NO
...

Test 4

Verdict: ACCEPTED

input
1 200000
629447384
1 1 670017180
1 1 826751744
1 1 -804919168
...

correct output
NO
NO
NO
YES
YES
...

user output
NO
NO
NO
YES
YES
...

Test 5

Verdict: ACCEPTED

input
200000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 6

Verdict: ACCEPTED

input
1000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 7

Verdict: ACCEPTED

input
10000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 8

Verdict: ACCEPTED

input
100000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 9

Verdict: ACCEPTED

input
200000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 10

Verdict: ACCEPTED

input
10 10
629447384 -729045992 811583872...

correct output
YES
NO
NO
NO
NO
...

user output
YES
NO
NO
NO
NO
...

Test 11

Verdict: ACCEPTED

input
1 200000
629447384
1 1 670017180
1 1 826751744
1 1 -804919168
...

correct output
NO
NO
NO
YES
YES
...

user output
NO
NO
NO
YES
YES
...

Test 12

Verdict: ACCEPTED

input
200000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 13

Verdict: ACCEPTED

input
1000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 14

Verdict: ACCEPTED

input
10000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 15

Verdict: ACCEPTED

input
100000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 16

Verdict: ACCEPTED

input
200000 200000
629447384 -729045992 811583872...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...