Submission #146707

#TimeUsernameProblemLanguageResultExecution timeMemory
146707dolphingarlicSails (IOI07_sails)C++14
30 / 100
216 ms3000 KiB
#include <bits/stdc++.h> #pragma GCC Optimize("O3") #define FOR(i, x, y) for (int i = x; i < y; i++) #define MOD 1000000007 typedef long long ll; using namespace std; const int MAXH = 100000; int bit1[100001], bit2[100001]; pair<int, int> a[100001]; void update(int l, int r, int val) { for (int i = l; i <= MAXH; i += (i & (-i))) bit1[i] += val; for (int i = r + 1; i <= MAXH; i += (i & (-i))) bit1[i] -= val; for (int i = l; i <= MAXH; i += (i & (-i))) bit2[i] += val * (l - 1); for (int i = r + 1; i <= MAXH; i += (i & (-i))) bit2[i] -= val * r; } int query(int l, int r) { int ans = 0; for (int i = r; i; i -= (i & (-i))) ans += bit1[i] * r; for (int i = l - 1; i; i -= (i & (-i))) ans -= bit1[i] * (l - 1); for (int i = r; i; i -= (i & (-i))) ans -= bit2[i]; for (int i = l - 1; i; i -= (i & (-i))) ans += bit2[i]; return ans; } int main() { iostream::sync_with_stdio(false); cin.tie(0); int n; cin >> n; FOR(i, 0, n) cin >> a[i].first >> a[i].second; sort(a, a + n); int ans = 0; FOR(i, 0, n) { int ub = query(a[i].first - a[i].second + 1, a[i].first - a[i].second + 1); int l = a[i].first - a[i].second + 1, r = a[i].first + 1; while (l != r) { int mid = (l + r) / 2; if (query(mid, mid) < ub) r = mid; else l = mid + 1; } int pos = l; ans += query(pos, a[i].first); update(pos, a[i].first, 1); // FOR(i, 1, 6) cout << query(i, i) << ' '; cout << '\n'; l = 1, r = a[i].first; while (l != r) { int mid = (l + r) / 2; if (query(mid, mid) > ub) l = mid + 1; else r = mid; } ans += query(l, l + a[i].second - a[i].first + pos - 2); update(l, l + a[i].second - a[i].first + pos - 2, 1); // FOR(i, 1, 6) cout << query(i, i) << ' '; cout << '\n'; // cout << ans << '\n'; } cout << ans; return 0; }

Compilation message (stderr)

sails.cpp:2:0: warning: ignoring #pragma GCC Optimize [-Wunknown-pragmas]
 #pragma GCC Optimize("O3")
#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...