Submission #777574

#TimeUsernameProblemLanguageResultExecution timeMemory
777574a_aguiloSails (IOI07_sails)C++14
40 / 100
1067 ms2524 KiB
#include<bits/stdc++.h> using namespace std; int N; long long ans; const int maxN = 100002; const int maxH = 100002; pair<int, int> masts[maxN]; int res[maxH]; void merge(int a1[], int l1, int a2[], int l2){ int pos1 = 0; int pos2 = 0; for(int i = 0; i < (l1 + l2); ++i){ if(pos1 <l1 && pos2 < l2){ if(a1[pos1] > a2[pos2]){ res[i] = (a1[pos1]); pos1++; }else{ res[i] = a2[pos2]; pos2++; } }else if(pos1 < l1){ res[i] = a1[pos1]; pos1++; }else{ res[i] = a2[pos2]; pos2++; } //cout << res[i] << " "; } //cout << endl; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); ans = 0; cin >> N; for(int i = 0; i < N; ++i) cin >> masts[i].first >> masts[i].second; int occupation[maxH]; int lim = 0; sort(masts, masts+N); for(int i = 0; i < N; ++i){ int h = masts[i].first; int k = masts[i].second; int prov[k]; while(lim < h){ occupation[lim] = 0; lim++; } for(int j = 0; j < k; ++j){ prov[k - j - 1] = occupation[lim-1] + 1; ans += occupation[lim-1]; lim--; } merge(occupation, lim, prov, k); swap(occupation, res); lim += k; } cout << ans << '\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...