Submission #937097

#TimeUsernameProblemLanguageResultExecution timeMemory
937097RegulusSails (IOI07_sails)C++17
100 / 100
73 ms3928 KiB
#include <bits/stdc++.h> #define IO ios::sync_with_stdio(false);cin.tie(0); #define debug(x) cerr << #x << " = " << (x) << ' ' #define bug(x) cerr << (x) << ' ' #define endl cerr << '\n' #define all(v) (v).begin(), (v).end() #define SZ(v) (ll)(v).size() #define lowbit(x) (x)&-(x) #define pb emplace_back #define F first #define S second using namespace std; using ll = long long; using pll = pair<ll, ll>; //#define TEST const int N = 1e5+5; ll bit[N]; pll a[N]; inline void upd(int x, int val) { if (x <= 0) assert(0); for (int i=x; i <= 1e5; i+=lowbit(i)) bit[i] += val; } inline ll query(int x) { ll ret = 0; for (int i=x; i > 0; i-=lowbit(i)) ret += bit[i]; return ret; } inline ll banana_search(int lb, int ub, int mx) { int mid; while (lb < ub) { mid = (lb + ub) >> 1; if (query(mid) <= mx) ub = mid; else lb = mid + 1; } return lb; } int main(void) { IO int n, i; cin >> n; for (i=1; i <= n; ++i) cin >> a[i].F >> a[i].S; sort(a+1, a+n+1); for (i=1; i <= n; ++i) { int mx = query(a[i].F-a[i].S+1); int it = banana_search(1, a[i].F+1, mx); int it2 = banana_search(1, a[i].F+1, mx-1); int cnt = it2 - (a[i].F-a[i].S+1); //debug(mx), debug(it), debug(it2), debug(cnt), endl; upd(it2, 1), upd(a[i].F+1, -1); upd(it, 1), upd(it+cnt, -1); } ll ans = 0; for (i=1; i <= 1e5; ++i) { ll tmp = query(i) - 1; if (tmp < -1) assert(0); ans += (tmp * (tmp + 1)) >> 1; } cout << ans << '\n'; 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...