Submission #1262101

#TimeUsernameProblemLanguageResultExecution timeMemory
1262101papauloSails (IOI07_sails)C++20
100 / 100
122 ms4356 KiB
#include <bits/stdc++.h> using namespace std; struct Node { int val, lazy; Node(int v) : val(v), lazy(0) {} Node() : Node(0) {} Node operator+(const Node &n) { return Node(min(this->val, n.val)); } }; #define MAXN 100100 pair<int, int> arr[MAXN]; Node seg[4*MAXN]; void build(int n, int l, int r) { if(l==r) seg[n]=Node(); else { int mid=(l+r)/2; build(2*n, l, mid); build(2*n+1, mid+1, r); seg[n]=seg[2*n]+seg[2*n+1]; } } void lazyPropagation(int n, int l, int r) { seg[n].val+=seg[n].lazy; if(l<r) { seg[2*n].lazy+=seg[n].lazy; seg[2*n+1].lazy+=seg[n].lazy; } seg[n].lazy=0; } void update(int n, int l, int r, int p, int q, int v) { if(l>q||p>r) { lazyPropagation(n, l, r); return; } if(l>=p&&r<=q) { seg[n].lazy+=v; lazyPropagation(n, l, r); return; } int mid=(l+r)/2; lazyPropagation(n, l, r); update(2*n, l, mid, p, q, v); update(2*n+1, mid+1, r, p, q, v); seg[n]=seg[2*n]+seg[2*n+1]; } int query(int n, int l, int r, int i) { lazyPropagation(n, l, r); if(l==r) return seg[n].val; int mid=(l+r)/2; if(i<=mid) return query(2*n, l, mid, i); return query(2*n+1, mid+1, r, i); } int fstidx(int n, int l, int r, int v) { lazyPropagation(n, l, r); if(seg[n].val>v) return r+1; if(l==r) return l; int mid=(l+r)/2; int lq=fstidx(2*n, l, mid, v); if(lq<=mid) return lq; return fstidx(2*n+1, mid+1, r, v); } #define MAXV 100000 int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int n; cin >> n; for(int i=0;i<n;i++) cin >> arr[i].first >> arr[i].second; sort(arr, arr+n); build(1, 1, MAXV); for(int i=0;i<n;i++) { int h=arr[i].first, k=arr[i].second; int mn=h-k+1; int val=query(1, 1, MAXV, mn); int i1=fstidx(1, 1, MAXV, val); int i2=fstidx(1, 1, MAXV, val-1); if(i2<=h) update(1, 1, MAXV, i2, h, 1); int cnt=min(i2, h+1)-mn; update(1, 1, MAXV, i1, i1+cnt-1, 1); } int64_t ans=0; for(int i=1;i<=MAXV;i++) { int64_t cur=query(1, 1, MAXV, i); ans+=cur*(cur-1)/2; } cout << ans << endl; 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...