Submission #135701

#TimeUsernameProblemLanguageResultExecution timeMemory
135701vinceWall (IOI14_wall)C++14
100 / 100
1075 ms100980 KiB
#include<stdio.h> #include<math.h> #include<string.h> #include<iostream> #include<algorithm> #include<vector> #include<utility> #include<stack> #include<queue> #include<map> #include<set> #define fi first #define se second #define long long long using namespace std; int mn[8000003], mx[8000003]; int lazy[8000003]; void cek_lazy(int pos, int kir, int kan) { if(lazy[pos] != -1) { mn[pos] = lazy[pos]; mx[pos] = lazy[pos]; if(kan-kir) lazy[pos*2] = lazy[pos*2+1] = lazy[pos]; lazy[pos] = -1; } } void update(int pos, int kir, int kan, int qkir, int qkan, int op, int val) { cek_lazy(pos, kir, kan); // printf("POS : %d %d %d Q : %d %d\n", pos, kir, kan, qkir, qkan); if(kan < qkir || qkan < kir) return; if(op == 1 && mn[pos] > val) return; if(op == 2 && mx[pos] < val) return; if(op == 1 && mx[pos] <= val && qkir <= kir && kan <= qkan) { lazy[pos] = val; cek_lazy(pos, kir, kan); return; } if(op == 2 && mn[pos] >= val && qkir <= kir && kan <= qkan) { lazy[pos] = val; cek_lazy(pos, kir, kan); return; } if(kir == kan) return; int mid = (kir+kan)/2; update(pos*2, kir, mid, qkir, qkan, op, val); update(pos*2+1, mid+1, kan, qkir, qkan, op, val); mn[pos] = min(mn[pos*2], mn[pos*2+1]); mx[pos] = max(mx[pos*2], mx[pos*2+1]); } int query(int pos, int kir, int kan, int idx) { cek_lazy(pos, kir, kan); if(kir == idx && kan == idx) return mx[pos]; int mid = (kir+kan)/2; if(idx <= mid) return query(pos*2, kir, mid, idx); else return query(pos*2+1, mid+1, kan, idx); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { memset(lazy, -1, sizeof lazy); for(int i = 0; i < k; i++) { // printf("%d %d %d %d\n", op[i], left[i], right[i], height[i]); update(1, 0, n-1, left[i], right[i], op[i], height[i]); } for(int i = 0; i < n; i++) finalHeight[i] = query(1, 0, n-1, i); return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...