Submission #441652

#TimeUsernameProblemLanguageResultExecution timeMemory
441652SirCovidThe19thSails (IOI07_sails)C++14
100 / 100
154 ms2632 KiB
#include <bits/stdc++.h> using namespace std; const int mx = 1e5+5; int n, bit[mx], nums[mx]; pair<int, int> vals[mx]; long long ans; void upd(int l, int r, int val){ for (; l < mx; l += l&(-l)) bit[l] += val; for (++r; r < mx; r += r&(-r)) bit[r] -= val; } int query(int i){ int ret = 0; for (; i > 0; i -= i&(-i)) ret += bit[i]; return ret; } int main(){ cin >> n; iota(nums, nums+mx, 0); for (int i = 0; i < n; i++) cin >> vals[i].first >> vals[i].second; sort(vals, vals+n); for (int i = 0; i < n; i++){ int H = vals[i].first, S = vals[i].second, L, F; L = lower_bound(nums+1, nums+H+1, query(H-S+1), [](int a, int val){ return query(a) > val; })-nums; F = upper_bound(nums+1, nums+H+1, query(H-S+1), [](int val, int a){ return query(a) < val; })-nums-1; upd(F+1, H, 1); upd(L, L+(F-(H-S+1)), 1); }for (int i = 1; i < mx; i++){ long long q = query(i); ans += (q*(q-1))/2; }cout<<ans; }
#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...