Submission #941826

#TimeUsernameProblemLanguageResultExecution timeMemory
941826codefoxSails (IOI07_sails)C++14
5 / 100
118 ms59124 KiB
#include<bits/stdc++.h> using namespace std; #define int long long int N = 1<<20; vector<int> bpro(2*N, 0); vector<int> bmin(2*N, 0); void update(int curr, int l, int r, int ll, int rr, int p) { if (l >= rr || r <= ll) { bpro[curr]+=p; bmin[curr]+=p; return; } if (l >= ll && r <= rr) { bpro[curr]+=p+1; bmin[curr]+=p+1; return; } p += bpro[curr]; bpro[curr] = 0; int m = (l+r)/2; update(curr*2, l, m, ll, rr, p); update(curr*2+1, m, r, ll, rr, p); bmin[curr] = min(bmin[curr*2], bmin[curr*2+1]); } int32_t main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int n; cin >> n; vector<vector<int>> height(1e6+1); int left = 0; int sol = 0; for (int i = 0; i < n; i++) { int a, b; cin >> a >> b; height[a].push_back(b); left += b; } priority_queue<int, vector<int>, less<int>> pq; for (int i = 1e6; i > 0; i--) { int h = bmin[i+N]; int curr = i+N; while (curr>1) { curr/=2; h+=bpro[curr]; } int b = left/i; h = b-h; for (int ele:height[i]) pq.push(ele); while (pq.size() && h>0) { update(1, 0, N, i+1-pq.top(), i+1, 0); pq.pop(); h--; } if (h ==0) { int u = left%i; h = bmin[i+N-u]; curr = i+N-u; while (curr>1) { curr/=2; h+=bpro[curr]; } if (pq.size() && h < left/i) { update(1, 0, N, i+1-pq.top(), i+1, 0); pq.pop(); } } /* while (pq.size() && pq.top() == i) { update(1, 0, N, i+1-pq.top(), i+1, 0); pq.pop(); } */ h = bmin[i+N]; curr = i+N; while (curr>1) { curr/=2; h+=bpro[curr]; } sol += (h*(h-1))/2; left -= h; } cout << sol << "\n"; 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...