Submission #993699

#TimeUsernameProblemLanguageResultExecution timeMemory
993699codefoxPyramid Base (IOI08_pyramid_base)C++14
70 / 100
5099 ms101400 KiB
#include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define arr array<int, 5> #pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma") int N = 1<<20; vector<int> bmin(2*N, 0); vector<int> badd(2*N, 0); void update(int curr, int l, int r, int a, int b, int add, int dd) { if (r<=a || l>=b) { bmin[curr] += add; badd[curr] += add; return; } if (a<=l && r<=b) { add+=dd; bmin[curr] += add; badd[curr] += add; return; } int m = (l+r)/2; add+=badd[curr]; badd[curr] = 0; update(curr*2, l, m, a, b, add, dd); update(curr*2+1, m, r, a, b, add, dd); bmin[curr] = min(bmin[curr*2], bmin[curr*2+1]); } int finde(int pos) { int curr = 1; int sol = 2*1e9+1; int add = 0; for (int i = 19; i >= 0; i--) { add += badd[curr]; curr*=2; if (pos < (1<<i)) continue; pos -= 1<<i; sol = min(sol, bmin[curr]+add); curr++; } return sol; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int x, y; cin >> x >> y; int b, n; cin >> b >> n; vector<arr> ele(n); for (int i= 0; i < n; i++) { int x1, y1, x2, y2, c; cin >> x1 >> y1 >> x2 >> y2 >> c; x1--; y1--; x2--; y2--; ele[i] = {x1, y1, x2, y2, c}; } int sum = 0; for (int i = 19; i >= 0; i--) { sum += 1<<i; vector<vector<arr>> begin(1e6); vector<vector<arr>> ende(1e6); bmin.assign(2*N, 0); badd.assign(2*N, 0); for (int j = 0; j < n; j++) { begin[max(0, ele[j][0]-sum+1)].push_back({max(0, ele[j][1]-sum+1), ele[j][3], ele[j][4]}); ende[ele[j][2]].push_back({max(0, ele[j][1]-sum+1), ele[j][3], ele[j][4]}); } int mn = 2*1e9+1; int u = 0; for (int j = 0; j < x-sum+1; j++) { for (arr ele2:begin[j]) update(1, 0, N, ele2[0], ele2[1]+1, 0, ele2[2]); if (u || mn == 2*1e9+1) { mn = min(mn, finde(y-sum+1)); u=0; } if (mn <= b) break; for (arr ele2:ende[j]) { u=1; update(1, 0, N, ele2[0], ele2[1]+1, 0, -ele2[2]); } } if (mn > b) sum -= 1<<i; } cout << sum; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...