Submission #1138939

#TimeUsernameProblemLanguageResultExecution timeMemory
1138939mychecksedadWall (IOI14_wall)C++20
100 / 100
613 ms59236 KiB
#include "wall.h" #include<bits/stdc++.h> using namespace std; #define ll long long int #define MOD (1000000000+7) #define MOD1 (998244353) #define pb push_back #define all(x) x.begin(), x.end() #define en cout << '\n' #define ff first #define ss second #define pii pair<int,int> #define vi vector<int> const int N = 1e7+100, M = 1e5+10, K = 52, MX = 30; int L[N], R[N], T[N]; void build(int l, int r, int k){ L[k] = 0; R[k] = MOD; if(l == r){ return; } int m = l+r>>1; build(l, m, k<<1); build(m+1, r, k<<1|1); } void push(int k){ if(L[k] > R[k<<1]){ R[k<<1] = L[k<<1] = L[k]; }else if(R[k] < L[k<<1]){ R[k<<1] = L[k<<1] = R[k]; }else{ R[k<<1] = min(R[k<<1], R[k]); L[k<<1] = max(L[k<<1], L[k]); } if(L[k] > R[k<<1|1]){ R[k<<1|1] = L[k<<1|1] = L[k]; }else if(R[k] < L[k<<1|1]){ R[k<<1|1] = L[k<<1|1] = R[k]; }else{ R[k<<1|1] = min(R[k<<1|1], R[k]); L[k<<1|1] = max(L[k<<1|1], L[k]); } L[k] = 0; R[k] = MOD; } void upd(int l, int r, int ql, int qr, int k, bool tp, int val){ if(ql > r || l > qr) return; if(ql <= l && r <= qr){ if(l != r) push(k); else{ if(tp == 0){ L[k] = min(L[k], val); R[k] = min(R[k], val); }else{ L[k] = max(L[k], val); R[k] = max(R[k], val); } return; } if(tp == 0){ // min R[k] = val; }else{ L[k] = val; } return; } push(k); int m = l+r>>1; upd(l, m, ql, qr, k<<1, tp, val); upd(m+1, r, ql, qr, k<<1|1, tp, val); } int get(int l, int r, int p, int k){ if(l == r){ return L[k]; } push(k); int m = l+r>>1; if(p <= m) return get(l, m, p, k<<1); return get(m+1, r, p, k<<1|1); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ build(0, n - 1, 1); for(int i = 0; i < k; ++i){ int tp = op[i]; upd(0, n - 1, left[i], right[i], 1, 1-(tp-1), height[i]); } for(int i = 0; i < n; ++i){ finalHeight[i] = get(0, n-1, i, 1); } 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...