Submission #514936

#TimeUsernameProblemLanguageResultExecution timeMemory
514936kevinSails (IOI07_sails)C++17
100 / 100
82 ms1484 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define all(x) x.begin(), x.end() #define f first #define s second #define ca(v) for(auto i:v) cout<<i<<" "; #define nl cout<<"\n" const int MAXN = 5e5 + 5; struct BIT { vector<int> f; int n; void init(int N) { f = vector<int>(N+1, 0); n = N;} int lsb(int x) { return x & -x; } void update(int p, int v){ while(p <= n){ f[p] += v; p += lsb(p); } } int query(int p) { int sum = 0; while (p > 0) { sum += f[p]; p -= lsb(p); } return sum; } }; int findup(BIT &bit, int x, int r){ int l = 1; int a = r; while(l <= r){ int m = (l + r) / 2; if(bit.query(m) >= x) { a = m; l = m+1; } else r = m-1; } return a; } int finddn(BIT &bit, int x, int r){ int l = 1; int a = 1; while(l <= r){ int m = (l + r) / 2; if(bit.query(m) <= x) { a = m; r = m-1; } else l = m+1; } return a; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; vector<pair<int, int>> ar; for(int i=0; i<n; i++){ int h, k; cin>>h>>k; ar.push_back({h, k}); } BIT bit; bit.init(100005); sort(ar.begin(), ar.end()); for(int i=0; i<n; i++){ int x = bit.query(ar[i].f - ar[i].s + 1); int l = finddn(bit, x, ar[i].f); int r = findup(bit, x, ar[i].f); bit.update(r+1, 1); bit.update(ar[i].f+1, -1); bit.update(l, 1); bit.update(l + ar[i].s - (ar[i].f-r), -1); } ll tot = 0; for(int i=1; i<=100000; i++){ int x = bit.query(i); tot += (ll)x * (x-1) / 2; } cout<<tot; }
#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...