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

Code

#include <iostream>
using namespace std;
const int N = 1<<17;
int spa[N<<1], spd[N<<1];
void set(int *sp, int i, int v) {
  i += N;
  sp[i] = v;
  while (i /= 2) {
    sp[i] = min(sp[i*2], sp[i*2+1]);
  }
}
int query(int *sp, int a, int b) {
  a += N; b += N;
  int r = 2e9;
  while (a <= b) {
    if (a&1) r = min(r, sp[a++]);
    if (~b&1) r = min(r, sp[b--]);
    a /= 2; b /= 2;
  }
  return r;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  for (int i = 1; i < 2*N; ++i) spa[i] = 2e9, spd[i] = 2e9;
  int n, q;
  cin >> n >> q;
  for (int i = 0; i < n; ++i) {
    int v;
    cin >> v;
    spa[N+i] = v+i;
    spd[N+i] = v+(n-i-1);
  }
  for (int i = N-1; i; --i) {
    spa[i] = min(spa[i*2], spa[i*2+1]);
    spd[i] = min(spd[i*2], spd[i*2+1]);
  }
  for (int i = 0; i < q; ++i) {
    int t, k;
    cin >> t >> k;
    k--;
    if (t == 1) {
      int v;
      cin >> v;
      set(spa, k, v+k);
      set(spd, k, v+(n-k-1));
    } else {
      int r;
      r = query(spd, 0, k)-(n-k-1);
      r = min(r, query(spa, k, n-1)-k);
      cout << r << '\n';
    }
  }
}

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
...