Submission #1162248

#TimeUsernameProblemLanguageResultExecution timeMemory
1162248Dan4LifeSails (IOI07_sails)C++20
100 / 100
285 ms2988 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int mxN = (int)1e5+10; ll n, ans; array<int,2> a[mxN]; template<int SZ> struct LazySegTree{ ll lz[SZ*2]; void init(){ memset(lz,0,sizeof(lz)); } void apply(int p, ll v){ lz[p]+=v; } void prop(int p, int l, int r){ if(!lz[p] or l==r) return; apply(p+2*((l+r)/2-l+1),lz[p]); apply(p+1,lz[p]); lz[p]=0; } void upd(int i, int j, ll v, int p=0, int l=0, int r=SZ-1){ if(i>r or j<l or i>j) return; prop(p,l,r); if(i<=l and r<=j) { apply(p,v); return; } int mid = (l+r)/2; int rp = p+2*(mid-l+1); upd(i,j,v,p+1,l,mid); upd(i,j,v,rp,mid+1,r); } ll query(int x, int p=0, int l=0, int r=SZ-1){ if(l==r) return lz[p]; prop(p,l,r); int mid = (l+r)/2; int rp = p+2*(mid-l+1); if(x<=mid) return query(x,p+1,l,mid); return query(x,rp,mid+1,r); } }; LazySegTree<mxN> seg; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n; seg.init(); for(int i = 0; i < n; i++) cin >> a[i][0] >> a[i][1]; sort(a,a+n); for(int i = 0; i < n; i++){ auto [h,k] = a[i]; ll b = seg.query(h-k); int l = 0, r = h-k; while(l<r){ int mid = (l+r)/2; if(seg.query(mid)==b) r=mid; else l=mid+1; } int x = l; l = h-k+1, r = h; while(l<r){ int mid = (l+r)/2; if(seg.query(mid)==b) l=mid+1; else r=mid; } seg.upd(l,h-1,1); k-=h-l; if(k) seg.upd(x,x+k-1,1); } for(int i = 0; i < mxN; i++){ ll x = seg.query(i); ans+=x*(x-1)/2; } cout << ans << "\n"; }
#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...