Submission #291164

#TimeUsernameProblemLanguageResultExecution timeMemory
291164couplefireSails (IOI07_sails)C++17
90 / 100
93 ms7032 KiB
#include <bits/stdc++.h> using namespace std; int prefix[100005] = {0}; set<int> nextPos; set<int> prevPos; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); // freopen("a.in", "r", stdin); int n; cin >> n; pair<int, int> arr[n]; for(int i = 0; i<n; i++) cin >> arr[i].first >> arr[i].second; sort(arr, arr+n); int cur = 100005; nextPos.insert(cur); prevPos.insert(-cur); for(auto p : arr){ int height = p.first, num = p.second; cur = 100005-height; prefix[cur]++; nextPos.insert(cur); prevPos.insert(-cur); if(cur+num == 100005) continue; prefix[cur+num]--; if(prefix[cur+num] == 0) nextPos.erase(cur+num), prevPos.erase(-cur-num); if(prefix[cur+num] == -1){ int npos = *nextPos.lower_bound(cur+num); int ppos = -*prevPos.lower_bound(-cur-num); prefix[npos]--; if(prefix[npos] == 0) nextPos.erase(npos), prevPos.erase(-npos); prefix[ppos]--; if(prefix[ppos] == 0) nextPos.erase(ppos), prevPos.erase(-ppos); prefix[cur+num] = 0; prefix[npos+ppos-cur-num] = 1; nextPos.insert(npos+ppos-cur-num); prevPos.insert(-npos-ppos+cur+num); } // cout << height << " " << num << endl; // int cnum = 0; // for(int i = cur; i<100005; i++){ // cnum += prefix[i]; // cout << cnum << " "; // } // cout << endl; } long long ans = 0; int cnum = 0; for(int i = cur; i<100005; i++){ cnum += prefix[i]; ans += cnum*(cnum-1)/2; } cout << ans << endl; }
#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...