Submission #521585

#TimeUsernameProblemLanguageResultExecution timeMemory
521585andrei_boacaSails (IOI07_sails)C++17
100 / 100
127 ms3720 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll n; ll aib[100005]; ll lg; struct date { ll h,k; } v[100005]; bool comp(date a, date b) { return a.h<b.h; } int lsb(int x) { return x&(-x); } void update(int poz,int val) { for(int i=poz;i<=lg;i+=lsb(i)) aib[i]+=val; } ll query(int poz) { ll rez=0; for(int i=poz;i>=1;i-=lsb(i)) rez+=aib[i]; return rez; } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>v[i].h>>v[i].k; sort(v+1,v+n+1,comp); lg=v[n].h; for(int i=1;i<=n;i++) { ll k=v[i].k; ll h=v[i].h; ll nr=query(h-k+1); ll first=h+1; ll st=1; ll dr=h; while(st<=dr) { int mij=(st+dr)/2; if(query(mij)<nr) { first=mij; dr=mij-1; } else st=mij+1; } if(first<=h) { update(first,+1); update(h+1,-1); } ll lft=k-(h-first+1); st=1; dr=h; first=h; while(st<=dr) { int mij=(st+dr)/2; if(query(mij)<=nr) { first=mij; dr=mij-1; } else st=mij+1; } update(first,+1); update(first+lft,-1); } ll ans=0; for(int i=1;i<=lg;i++) { ll val=query(i); ans+=val*(val-1)/2; } cout<<ans; 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...