CSES - Harjoituskisa 14.1.2018 - Results
Submission details
Task:Pizzeriat
Sender:Kuha
Submission time:2018-01-14 19:36:10 +0200
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED11
#2ACCEPTED43
#3ACCEPTED46
Test results
testverdicttimegroup
#1ACCEPTED0.04 s1details
#2ACCEPTED0.04 s1details
#3ACCEPTED0.04 s1details
#4ACCEPTED0.27 s2details
#5ACCEPTED0.26 s2details
#6ACCEPTED0.24 s2details
#7ACCEPTED0.24 s3details
#8ACCEPTED0.27 s3details
#9ACCEPTED0.23 s3details

Code

#include <bits/stdc++.h>

#define N (1<<17)
#define ll long long
#define ld long double
#define M 1000000007
#define INF 0x5ADFACE5
#define LINF 0x51DEEFFEC7C0DECALL
#define pii pair<int, int>
#define pll pair<long long, long long>
#define F first
#define S second

using namespace std;

int l[2 * N];
int r[2 * N];
int p[N];
int n, q;

void setv(int k, int n) {
	l[k + N] = k - n;
	r[k + N] = k + n;
	k += N;
	for (k /= 2; k >= 1; k /= 2) {
		l[k] = max(l[2 * k], l[2 * k + 1]);
		r[k] = min(r[2 * k], r[2 * k + 1]);
	}
}

int lq (int i) {
	int a = 1 + N;
	int b = i + N;
	int ans = -INF;
	while (a <= b) {
		if (a & 1) ans = max(ans, l[a++]);
		if (~b & 1) ans = max(ans, l[b--]);
		a /= 2;
		b /= 2;
	}
	return ans;
}

int rq (int i) {
	int a = i + N;
	int b = n + N;
	int ans = INF;
	while (a <= b) {
		if (a & 1) ans = min(ans, r[a++]);
		if (~b & 1) ans = min(ans, r[b--]);
		a /= 2;
		b /= 2;
	}
	return ans;
}

int main () {
	cin>>n>>q;
	for (int i = 1; i <= n; i++) cin>>p[i];
	for (int i = 1; i <= n; i++) {
		setv(i, p[i]);
	}
	while (q --> 0) {
		int t;
		cin>>t;
		if (t == 1) {
			int a, b;
			cin>>a>>b;
			setv(a, b);
			p[a] = b;
		} else {
			int i;
			cin>>i;
			int ans = min(p[i], min(i - lq(i - 1), rq(i + 1) - i));
			cout<<ans<<endl;
		}
	}
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
1000 1000
720 271 760 576 363 23 368 995...

correct output
43
12
40
22
18
...

user output
43
12
40
22
18
...

Test 2

Group: 1

Verdict: ACCEPTED

input
1000 1000
720 18 984 261 344 257 686 441...

correct output
10
20
27
37
73
...

user output
10
20
27
37
73
...

Test 3

Group: 1

Verdict: ACCEPTED

input
1000 1000
120 764 890 848 949 59 894 916...

correct output
24
25
13
16
19
...

user output
24
25
13
16
19
...

Test 4

Group: 2

Verdict: ACCEPTED

input
100000 100000
11763 43585 3126 3787 79765 64...

correct output
284
143
346
203
157
...

user output
284
143
346
203
157
...

Test 5

Group: 2

Verdict: ACCEPTED

input
100000 100000
76947 78386 71190 65478 90345 ...

correct output
459
297
128
234
204
...

user output
459
297
128
234
204
...

Test 6

Group: 2

Verdict: ACCEPTED

input
100000 100000
39277 33504 98385 58115 28655 ...

correct output
234
221
156
455
78
...

user output
234
221
156
455
78
...

Test 7

Group: 3

Verdict: ACCEPTED

input
100000 100000
46508 6952 22836 54480 91235 2...

correct output
427
409
352
39
388
...

user output
427
409
352
39
388
...

Test 8

Group: 3

Verdict: ACCEPTED

input
100000 100000
15918 8771 36223 76330 39229 7...

correct output
316
387
435
330
446
...

user output
316
387
435
330
446
...

Test 9

Group: 3

Verdict: ACCEPTED

input
100000 100000
87734 39225 78667 43704 17207 ...

correct output
228
83
176
428
273
...

user output
228
83
176
428
273
...