Submission details
Task:Lucky prefixes
Sender:Aalto CS-A1140 Team 2
Submission time:2025-11-08 12:14:31 +0200
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.12 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.07 sdetails
#5ACCEPTED0.16 sdetails
#6ACCEPTED0.09 sdetails
#7ACCEPTED0.10 sdetails
#8ACCEPTED0.13 sdetails
#9ACCEPTED0.17 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.07 sdetails
#12ACCEPTED0.16 sdetails
#13ACCEPTED0.09 sdetails
#14ACCEPTED0.10 sdetails
#15ACCEPTED0.13 sdetails
#16ACCEPTED0.16 sdetails

Code

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

struct T {
	long sum;
	long misum;

	T operator+(T oth) {
		return {
			sum + oth.sum,
			min({0l, misum, sum + oth.misum})
		};
	}
};

const int N = 1 << 18;
T t[N * 2];

void st_add(int k, int x) {
	k += N;
	t[k].sum += x;
	t[k].misum += x;

	while (k /= 2) {
		t[k] = t[k * 2] + t[k * 2 + 1];
	}
}

bool st_query(int l, int r) {
	l += N;
	r += N;

	T ret_l {}, ret_r {};
	while (l <= r) {
		if (l % 2 == 1) ret_l = ret_l + t[l++];
		if (r % 2 == 0) ret_r = t[r--] + ret_r;
		l /= 2;
		r /= 2;
	}

	return (ret_l + ret_r).misum >= 0;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, q;
	cin >> n >> q;

	vector<int> v(n);

	for (int i = 0; i < n; ++i) {
		cin >> v[i];
		st_add(i, v[i]);
	}

	while (q--) {
		int c, a, b;
		cin >> c >> a >> b;
		if (c == 1) {
			a--;
			st_add(a, -v[a]);
			v[a] = b;
			st_add(a, v[a]);
		} else {
			a--;
			b--;
			cout << (st_query(a, b) ? "YES" : "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
...