# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
139652 |
2019-08-01T08:21:19 Z |
dcordb |
Wall (IOI14_wall) |
C++11 |
|
2651 ms |
126844 KB |
#include "wall.h"
#include <bits/stdc++.h>
using namespace std;
const int
MAX = 2e6 + 5,
INF = 1e6;
int lazy[4 * MAX][5];
int a[MAX];
int reduce(const int &a, const int &b, bool &ok) {
int x = abs(a);
int y = abs(b);
if(a < 0 && b < 0)
return (x <= y) ? a : b;
if(a >= 0 && b >= 0)
return (x <= y) ? b : a;
ok = false;
return 0;
}
void transform(int &a, int &b) {
int x = abs(a);
int y = abs(b);
if(a < 0 && b >= 0) {
if(x <= y) {
a = INF;
b *= -1;
}
else swap(a, b);
}
else {
assert(b < 0);
if(x <= y)
swap(a, b);
else {
a = -1;
b *= -1;
}
}
}
void reduce(int a, int b) {
for(int i = 1; i <= lazy[b][0]; i++) {
int p = ++lazy[a][0];
lazy[a][p] = lazy[b][i];
}
assert(lazy[a][0] <= 4);
int s[lazy[a][0]]; int k = 0;
for(int i = 1; i <= lazy[a][0]; i++) {
int o = lazy[a][i];
if(k == 0) {
s[k++] = o;
continue;
}
int x = s[k - 1];
k--;
bool ok = true;
int r = reduce(x, o, ok);
if(ok)
s[k++] = r;
else {
if(k == 0) {
s[k++] = x;
s[k++] = o;
}
else {
int y = s[k - 1];
k--;
transform(y, x);
s[k++] = y;
ok = true;
r = reduce(x, o, ok);
assert(ok);
s[k++] = r;
}
}
}
lazy[a][0] = k;
for(int i = 0; i < k; i++)
lazy[a][i + 1] = s[i];
}
void build(int x, int st, int nd) {
lazy[x][++lazy[x][0]] = 0;
if(st == nd) return;
int mid = (st + nd) >> 1;
build(2 * x, st, mid);
build(2 * x + 1, mid + 1, nd);
}
void prop(int x, int st, int nd) {
if(lazy[x][0] == 1 && lazy[x][1] == 0)
return;
if(st == nd) {
for(int i = 1; i <= lazy[x][0]; i++) {
int o = lazy[x][i];
if(o >= 0)
a[st] = max(a[st], o);
else a[st] = min(a[st], -o);
}
}
else {
reduce(2 * x, x);
reduce(2 * x + 1, x);
}
lazy[x][0] = 0;
lazy[x][++lazy[x][0]] = 0;
}
void upd(int x, int st, int nd, int a, int b, const int &o) {
prop(x, st, nd);
if(st > b || nd < a)
return;
if(st >= a && nd <= b) {
lazy[x][0] = 0;
lazy[x][++lazy[x][0]] = o;
prop(x, st, nd);
return;
}
int mid = (st + nd) >> 1;
upd(2 * x, st, mid, a, b, o);
upd(2 * x + 1, mid + 1, nd, a, b, o);
}
void buildWall(int n, int m, int operation[], int l[], int r[], int h[], int ans[]) {
build(1, 0, n - 1);
for(int i = 0; i < m; i++) {
int height = h[i] + 1;
if(operation[i] == 1)
upd(1, 0, n - 1, l[i], r[i], height);
else upd(1, 0, n - 1, l[i], r[i], -height);
}
for(int i = 0; i < n; i++) {
upd(1, 0, n - 1, i, i, 0);
ans[i] = max(0, a[i] - 1);
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
4 ms |
508 KB |
Output is correct |
3 |
Correct |
5 ms |
376 KB |
Output is correct |
4 |
Correct |
24 ms |
1404 KB |
Output is correct |
5 |
Correct |
12 ms |
1272 KB |
Output is correct |
6 |
Correct |
12 ms |
1232 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
256 KB |
Output is correct |
2 |
Correct |
172 ms |
8728 KB |
Output is correct |
3 |
Correct |
556 ms |
5436 KB |
Output is correct |
4 |
Correct |
2410 ms |
14648 KB |
Output is correct |
5 |
Correct |
386 ms |
15188 KB |
Output is correct |
6 |
Correct |
384 ms |
15224 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
4 ms |
504 KB |
Output is correct |
3 |
Correct |
5 ms |
380 KB |
Output is correct |
4 |
Correct |
24 ms |
1272 KB |
Output is correct |
5 |
Correct |
12 ms |
1272 KB |
Output is correct |
6 |
Correct |
12 ms |
1272 KB |
Output is correct |
7 |
Correct |
2 ms |
376 KB |
Output is correct |
8 |
Correct |
174 ms |
8796 KB |
Output is correct |
9 |
Correct |
581 ms |
5376 KB |
Output is correct |
10 |
Correct |
2357 ms |
14644 KB |
Output is correct |
11 |
Correct |
386 ms |
15324 KB |
Output is correct |
12 |
Correct |
397 ms |
15224 KB |
Output is correct |
13 |
Correct |
2 ms |
256 KB |
Output is correct |
14 |
Correct |
179 ms |
8624 KB |
Output is correct |
15 |
Correct |
128 ms |
2680 KB |
Output is correct |
16 |
Correct |
2632 ms |
14944 KB |
Output is correct |
17 |
Correct |
560 ms |
14944 KB |
Output is correct |
18 |
Correct |
405 ms |
15024 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
4 ms |
504 KB |
Output is correct |
3 |
Correct |
5 ms |
376 KB |
Output is correct |
4 |
Correct |
26 ms |
1272 KB |
Output is correct |
5 |
Correct |
13 ms |
1272 KB |
Output is correct |
6 |
Correct |
13 ms |
1400 KB |
Output is correct |
7 |
Correct |
2 ms |
376 KB |
Output is correct |
8 |
Correct |
176 ms |
8824 KB |
Output is correct |
9 |
Correct |
567 ms |
5508 KB |
Output is correct |
10 |
Correct |
2369 ms |
14648 KB |
Output is correct |
11 |
Correct |
401 ms |
15224 KB |
Output is correct |
12 |
Correct |
384 ms |
15280 KB |
Output is correct |
13 |
Correct |
2 ms |
256 KB |
Output is correct |
14 |
Correct |
175 ms |
8568 KB |
Output is correct |
15 |
Correct |
139 ms |
2680 KB |
Output is correct |
16 |
Correct |
2651 ms |
14916 KB |
Output is correct |
17 |
Correct |
417 ms |
14936 KB |
Output is correct |
18 |
Correct |
415 ms |
14972 KB |
Output is correct |
19 |
Correct |
1990 ms |
116356 KB |
Output is correct |
20 |
Correct |
1966 ms |
124092 KB |
Output is correct |
21 |
Correct |
1990 ms |
126592 KB |
Output is correct |
22 |
Correct |
1987 ms |
124268 KB |
Output is correct |
23 |
Correct |
1995 ms |
124220 KB |
Output is correct |
24 |
Correct |
2019 ms |
124180 KB |
Output is correct |
25 |
Correct |
1990 ms |
124084 KB |
Output is correct |
26 |
Correct |
1999 ms |
126844 KB |
Output is correct |
27 |
Correct |
1968 ms |
126624 KB |
Output is correct |
28 |
Correct |
1952 ms |
124276 KB |
Output is correct |
29 |
Correct |
2017 ms |
124392 KB |
Output is correct |
30 |
Correct |
1969 ms |
124172 KB |
Output is correct |