| Task: | Lucky prefixes |
| Sender: | Hornet's Multithreading |
| Submission time: | 2025-11-08 12:16:54 +0200 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | details |
| #2 | ACCEPTED | 0.16 s | details |
| #3 | ACCEPTED | 0.01 s | details |
| #4 | ACCEPTED | 0.07 s | details |
| #5 | ACCEPTED | 0.25 s | details |
| #6 | ACCEPTED | 0.12 s | details |
| #7 | ACCEPTED | 0.14 s | details |
| #8 | ACCEPTED | 0.20 s | details |
| #9 | ACCEPTED | 0.25 s | details |
| #10 | ACCEPTED | 0.01 s | details |
| #11 | ACCEPTED | 0.07 s | details |
| #12 | ACCEPTED | 0.25 s | details |
| #13 | ACCEPTED | 0.12 s | details |
| #14 | ACCEPTED | 0.14 s | details |
| #15 | ACCEPTED | 0.20 s | details |
| #16 | ACCEPTED | 0.25 s | details |
Code
#include <bits/stdc++.h>
using namespace std;
#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()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int N = 2e5 + 5;
struct segment_tree {
long long mn[4 * N];
long long lz[4 * N];
segment_tree() {
memset(mn, 0, sizeof(mn));
memset(lz, 0, sizeof(lz));
}
void push(int id) {
mn[id << 1] += lz[id];
lz[id << 1] += lz[id];
mn[id << 1 | 1] += lz[id];
lz[id << 1 | 1] += lz[id];
lz[id] = 0;
}
void upd(int id, int tl, int tr, int l, int r, long long x) {
if (l <= tl && tr <= r) {
mn[id] += x;
lz[id] += x;
return;
}
if (lz[id] != 0) {
push(id);
}
int tm = (tl + tr) >> 1;
if (r <= tm) {
upd(id << 1, tl, tm, l, r, x);
} else if (tm + 1 <= l) {
upd(id << 1 | 1, tm + 1, tr, l, r, x);
} else {
upd(id << 1, tl, tm, l, r, x);
upd(id << 1 | 1, tm + 1, tr, l, r, x);
}
mn[id] = min(mn[id << 1], mn[id << 1 | 1]);
}
long long get(int id, int tl, int tr, int l, int r) {
if (l <= tl && tr <= r) {
return mn[id];
}
if (lz[id] != 0) {
push(id);
}
int tm = (tl + tr) >> 1;
if (r <= tm) {
return get(id << 1, tl, tm, l, r);
} else if (tm + 1 <= l) {
return get(id << 1 | 1, tm + 1, tr, l, r);
} else {
return min(get(id << 1, tl, tm, l, r), get(id << 1 | 1, tm + 1, tr, l, r));
}
}
};
int n, q;
int a[N];
segment_tree st;
void upd(int id, int x) {
long long d = x - a[id];
a[id] = x;
st.upd(1, 1, n, id, n, d);
}
string que(int l, int r) {
return st.get(1, 1, n, l, r) >= (l == 1 ? 0 : st.get(1, 1, n, l - 1, l - 1)) ? "YES" : "NO";
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin.exceptions(cin.failbit);
cin >> n >> q;
long long z = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
z += a[i];
st.upd(1, 1, n, i, i, z);
}
while (q--) {
int t;
cin >> t;
if (t == 1) {
int i, x;
cin >> i >> x;
upd(i, x);
} else {
int l, r;
cin >> l >> r;
cout << que(l, r) << '\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 ... |
