Submission #1011313

#TimeUsernameProblemLanguageResultExecution timeMemory
1011313kaopjSails (IOI07_sails)C++17
100 / 100
66 ms3932 KiB
#include <iostream> #include <vector> #include <algorithm> #define lgm cin.tie(0)->sync_with_stdio(0); using namespace std; #define int long long #define h first #define k second pair<int,int> a[100007]; int dem[100007]; int n; struct fenwick { int n; vector<int> t; fenwick(){} fenwick(int n):n(n),t(n+7,0){} void up(int x,int val) { for(;x<=n;x+=(x&(-x))) t[x]+=val; } int get(int x) { int ans=0; for(;x;x-=(x&(-x))) ans+=t[x]; return ans; } }; signed main() { lgm; cin >> n; for(int i=1;i<=n;i++) { cin >> a[i].h >> a[i].k; } sort(a+1,a+n+1); fenwick t(a[n].h); for (int i=1;i<=n;i++) { int h=a[i].h,k=a[i].k; int val=t.get(h-k); int l=1,r=h; int res=1; while (l<=r) { int m=(l+r)>>1; if (t.get(m)<=val) { res=m; r=m-1; } else { l=m+1; } } int left=res; l=1,r=h; res=h+1; while (l<=r) { int m=(l+r)>>1; if (t.get(m)>=val) { res=m; l=m+1; } else { r=m-1; } } int right=res; if (h==k) { right=0; } t.up(right+1,1); t.up(h+1,-1); t.up(left,1); t.up(left+(k-(h-right)),-1); } int ans=0; for(int i=1;i<=a[n].h;i++){ int x=t.get(i); ans+=(x)*(x-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...