제출 #1256170

#제출 시각아이디문제언어결과실행 시간메모리
1256170attky벽 (IOI14_wall)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> #include "wall.h" using namespace std; struct inter { int deb, fin; int mid() { return (deb+fin)/2; } inter left() { return {deb, mid()}; } inter right() { return {mid()+1, fin}; } bool contain(inter other) { return (deb <= other.deb && other.fin <= fin); } bool intersect(inter other) { return !(other.fin < deb || other.deb > fin); } inter intersection(inter other) { if(intersect(other)) { return {max(deb, other.deb), min(fin, other.fin)}; } if(other.fin < deb) { return {other.fin, other.fin}; } return {other.deb, other.deb}; } }; struct SegTree { int n = 1; inter zero = {0, int(1e9)}; vector<inter> tree; void init(int _n) { while(n < _n) { n *= 2; } tree.resize(2*n, zero); } void push(int pos) { if(pos < n) { tree[2*pos].intersection(tree[pos]); tree[2*pos+1].intersection(tree[pos]); tree[pos] = zero; } } void fullPush() { for(int loop = 1; loop < n; ++loop) { push(loop); } } void modif(inter value, inter zoneModif, int pos, inter nodeInter) { push(pos); if(zoneModif.contain(nodeInter)) { tree[pos].intersection(value); } else { if(zoneModif.intersect(nodeInter.left())) { modif(value, zoneModif, pos*2, nodeInter.left()); } if(zoneModif.intersect(nodeInter.right())) { modif(value, zoneModif, pos*2+1, nodeInter.right()); } } } }; void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ SegTree tree; tree.init(n); inter mod[k], modInter[k]; for(int loop = 0; loop < k; ++loop) { if(op[loop] == 1) { mod[loop] = {height[loop], int(1e9)}; } else { mod[loop] = {0, height[loop]}; } modInter[loop] = {left[loop], right[loop]}; } for(int loop = 0; loop < k; ++loop) { tree.modif(mod[loop], modInter[loop], 1, {0, tree.n - 1}); } tree.fullPush(); for(int loop = 0; loop < n; ++loop) { finalHeight[loop] = tree.tree[loop+tree.n].deb; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...