Submission #776199

#TimeUsernameProblemLanguageResultExecution timeMemory
776199Ahmed57Sails (IOI07_sails)C++17
100 / 100
105 ms2708 KiB
#include <bits/stdc++.h> using namespace std; //BIT Fenwick tree long long bit[100005]={0}; void add(int e,int v){ while(e<=100002){ bit[e]+=v; e+=e&-e; } } long long sum(int e){ long long res = 0; while(e>=1){ res+=bit[e]; e -= e&-e; } return res; } //end BIT int main(){ int n; cin>>n; vector<pair<int,int>> v; for(int i =0;i<n;i++){ int a,b;cin>>a>>b; v.push_back({a,b}); } sort(v.begin(),v.end()); for(int i = 0;i<n;i++){ int h = v[i].first; int k = v[i].second; long long diff = h-k+1 , cur = sum(diff); int ans = -1 , l = diff , r = h; while(l<=r){ int mid = (l+r)/2; if(sum(mid)>=cur){ ans = mid; l = mid+1; }else r = mid-1; } int ans2 = -1 , l2 = 1 , r2 = diff; while(l2<=r2){ int mid = (l2+r2)/2; if(sum(mid)<=cur){ ans2 = mid; r2 = mid-1; }else l2 = mid+1; } add(ans+1,1); add(h+1,-1); add(ans2,1); add(ans2+k-(h-ans),-1); } long long all = 0; for(int i = 1;i<=100000;i++){ long long sz = sum(i); all+=sz*(sz-1)/2; } cout<<all<<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...