# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
1121301 |
2024-11-28T17:53:49 Z |
Irate |
벽 (IOI14_wall) |
C++17 |
|
796 ms |
161992 KB |
#include<bits/stdc++.h>
using namespace std;
/*
10 6
1 1 8 4
2 4 9 1
2 3 6 5
1 0 5 3
1 2 2 5
2 6 7 0
*/
struct Node{
int l = -1, r = -1;
};
Node intersect(Node &cur, Node &upd){
if(cur.l < 0){
return upd;
}
if(upd.l > cur.r){
return {upd.l, upd.l};
}
else if(cur.l > upd.r){
return {upd.r, upd.r};
}
else if(cur.l <= upd.l && upd.l <= cur.r && cur.r <= upd.r){
return {upd.l, cur.r};
}
else if(upd.l <= cur.l && cur.l <= upd.r && upd.r <= cur.r){
return {cur.l, upd.r};
}
else if(cur.l <= upd.l && upd.r <= cur.r){
return upd;
}
return cur;
}
struct SegmentTree{
vector<Node>sTree, lazy;
void init(int n){
sTree.resize(4 * n);
lazy.resize(4 * n);
}
void Propagate(int node, int l, int r){
if(lazy[node].l < 0)return;
if(l != r){
lazy[node * 2] = intersect(lazy[node * 2], lazy[node]);
lazy[node * 2 + 1] = intersect(lazy[node * 2 + 1], lazy[node]);
}
else{
sTree[node] = intersect(sTree[node], lazy[node]);
}
lazy[node] = {-1, -1};
}
void Build(int node, int l, int r){
if(l == r){
sTree[node] = {0, 0};
}
else{
int mid = (l + r) >> 1;
Build(node * 2, l, mid);
Build(node * 2 + 1, mid + 1, r);
}
}
void R_Update(int node, int l, int r, int ql, int qr, int type, int x){
Propagate(node, l, r);
if(ql <= l && r <= qr){
if(type == 2){
lazy[node] = {0, x};
}
else{
lazy[node] = {x, 100000};
}
Propagate(node, l, r);
return;
}
if(ql > r || l > qr){
return;
}
int mid = (l + r) >> 1;
R_Update(node * 2, l, mid, ql, qr, type, x);
R_Update(node * 2 + 1, mid + 1, r, ql, qr, type, x);
}
int Get(int node, int l, int r, int pos){
Propagate(node, l, r);
if(l == r){
return sTree[node].l;
}
else{
int mid = (l + r) >> 1;
if(pos <= mid){
return Get(node * 2, l, mid, pos);
}
else{
return Get(node * 2 + 1, mid + 1, r, pos);
}
}
}
} tree;
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
tree.init(n);
tree.Build(1, 1, n);
for(int i = 0;i < k;++i){
tree.R_Update(1, 1, n, left[i] + 1, right[i] + 1, op[i], height[i]);
}
for(int i = 1;i <= n;++i){
finalHeight[i - 1] = tree.Get(1, 1, n, i);
}
}
// int main(){
// ios_base::sync_with_stdio(0);
// cin.tie(0);
// int n, q;
// cin >> n >> q;
// int op[q], left[q], right[q], height[q], finalHeight[n];
// for(int i = 0;i < q;++i){
// cin >> op[i] >> left[i] >> right[i] >> height[i];
// }
// buildWall(n, q, op, left, right, height, finalHeight);
// }
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
2 ms |
340 KB |
Output is correct |
3 |
Correct |
3 ms |
340 KB |
Output is correct |
4 |
Correct |
10 ms |
1108 KB |
Output is correct |
5 |
Correct |
8 ms |
1108 KB |
Output is correct |
6 |
Correct |
5 ms |
1120 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
128 ms |
14056 KB |
Output is correct |
3 |
Correct |
206 ms |
8524 KB |
Output is correct |
4 |
Correct |
617 ms |
24696 KB |
Output is correct |
5 |
Correct |
250 ms |
25800 KB |
Output is correct |
6 |
Correct |
240 ms |
24140 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
2 ms |
340 KB |
Output is correct |
3 |
Correct |
2 ms |
340 KB |
Output is correct |
4 |
Correct |
8 ms |
1108 KB |
Output is correct |
5 |
Correct |
4 ms |
1272 KB |
Output is correct |
6 |
Correct |
6 ms |
1108 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
88 ms |
13900 KB |
Output is correct |
9 |
Correct |
226 ms |
8596 KB |
Output is correct |
10 |
Correct |
618 ms |
24688 KB |
Output is correct |
11 |
Correct |
231 ms |
25664 KB |
Output is correct |
12 |
Correct |
203 ms |
24168 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
117 ms |
14004 KB |
Output is correct |
15 |
Correct |
31 ms |
2576 KB |
Output is correct |
16 |
Correct |
658 ms |
24848 KB |
Output is correct |
17 |
Correct |
238 ms |
24396 KB |
Output is correct |
18 |
Correct |
256 ms |
24392 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
340 KB |
Output is correct |
2 |
Correct |
3 ms |
596 KB |
Output is correct |
3 |
Correct |
3 ms |
340 KB |
Output is correct |
4 |
Correct |
7 ms |
1212 KB |
Output is correct |
5 |
Correct |
5 ms |
1364 KB |
Output is correct |
6 |
Correct |
5 ms |
1156 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
115 ms |
13856 KB |
Output is correct |
9 |
Correct |
227 ms |
8556 KB |
Output is correct |
10 |
Correct |
655 ms |
24632 KB |
Output is correct |
11 |
Correct |
232 ms |
25668 KB |
Output is correct |
12 |
Correct |
201 ms |
24140 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
111 ms |
13892 KB |
Output is correct |
15 |
Correct |
39 ms |
2576 KB |
Output is correct |
16 |
Correct |
673 ms |
24804 KB |
Output is correct |
17 |
Correct |
239 ms |
24396 KB |
Output is correct |
18 |
Correct |
202 ms |
24364 KB |
Output is correct |
19 |
Correct |
746 ms |
161608 KB |
Output is correct |
20 |
Correct |
688 ms |
159196 KB |
Output is correct |
21 |
Correct |
717 ms |
161852 KB |
Output is correct |
22 |
Correct |
742 ms |
159592 KB |
Output is correct |
23 |
Correct |
717 ms |
159448 KB |
Output is correct |
24 |
Correct |
731 ms |
159564 KB |
Output is correct |
25 |
Correct |
678 ms |
159532 KB |
Output is correct |
26 |
Correct |
720 ms |
161540 KB |
Output is correct |
27 |
Correct |
686 ms |
161992 KB |
Output is correct |
28 |
Correct |
707 ms |
159564 KB |
Output is correct |
29 |
Correct |
784 ms |
159468 KB |
Output is correct |
30 |
Correct |
796 ms |
159596 KB |
Output is correct |