# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
254365 |
2020-07-29T21:54:21 Z |
aZvezda |
Sails (IOI07_sails) |
C++14 |
|
294 ms |
15488 KB |
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize ("O3")
//#pragma GCC target ("sse4")
#define endl "\n"
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
template<class T, class T2> inline bool chkmax(T &x, const T2 &y) { return x < y ? x = y, 1 : 0; }
template<class T, class T2> inline bool chkmin(T &x, const T2 &y) { return x > y ? x = y, 1 : 0; }
const ll mod = 1e9 + 7;
template<class T> inline void fix(T &x) {if(x >= mod | x <= -mod) {x %= mod;} if(x < 0) {x += mod;}}
#define out(x) cout << __LINE__ << ": " << (#x) << " = " << (x) << endl
const ll MAX_N = 1e5 + 20;
struct Node {
ll sum, mx, mn, lazy;
Node() {sum = mx = mn = lazy = 0;}
};
Node tree[4 * MAX_N];
void push(ll curr, ll l, ll r) {
tree[curr].sum += tree[curr].lazy * (r - l + 1);
tree[curr].mx += tree[curr].lazy;
tree[curr].mn += tree[curr].lazy;
if(l != r) {
tree[curr * 2].lazy += tree[curr].lazy;
tree[curr * 2 + 1].lazy += tree[curr].lazy;
}
tree[curr].lazy = 0;
}
Node operator +(const Node &a, const Node &b) {
Node ret;
ret.sum = a.sum + b.sum;
ret.mx = max(a.mx, b.mx);
ret.mn = min(a.mn, b.mn);
return ret;
}
ll nowoff;
void upd(ll curr, ll l, ll r, ll ql, ll qr, ll val) {
push(curr, l, r);
if(ql <= l && r <= qr) {
tree[curr].lazy += val;
push(curr, l, r);
return;
} else if(l > qr || r < ql) {return;}
ll m = (l + r) / 2ll;
upd(curr * 2, l, m, ql, qr, val);
upd(curr * 2 + 1, m + 1, r, ql, qr, val);
tree[curr] = tree[curr * 2] + tree[curr * 2 + 1];
}
ll sum(ll curr, ll l, ll r, ll ql, ll qr) {
push(curr, l, r);
if(ql <= l && r <= qr) {
return tree[curr].sum;
} else if(l > qr || r < ql) {return 0;}
ll m = (l + r) / 2ll;
return sum(curr * 2, l, m, ql, qr) + sum(curr * 2 + 1, m + 1, r, ql, qr);
}
ll firstEqual(ll curr, ll l, ll r, ll val) {
push(curr, l, r);
if(l == r) {
return r;
}
ll m = (l + r) / 2ll;
push(curr * 2, l, m);
push(curr * 2 + 1, m + 1, r);
if(tree[curr * 2].mx >= val) {
return firstEqual(curr * 2, l, m, val);
} else {
return firstEqual(curr * 2 + 1, m + 1, r, val);
}
}
pair<ll, ll> arr[MAX_N];
ll n;
ll offset = 1e5 + 10;
signed main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n;
for(ll i = 0; i < n; i ++) {
cin >> arr[i].first >> arr[i].second;
}
sort(arr, arr + n);
ll ret = 0;
upd(1, 0, MAX_N - 1, 0, MAX_N - 1, -mod);
upd(1, 0, MAX_N - 1, offset, MAX_N - 1, 2 * mod);
int last = offset;
for(ll i = 0; i < n; i ++) {
nowoff = offset - arr[i].first;
while(last > nowoff) {
last --;
upd(1, 0, MAX_N - 1, last, last, mod);
}
ll now = sum(1, 0, MAX_N - 1, nowoff + arr[i].second - 1, nowoff + arr[i].second - 1);
ll l = firstEqual(1, 0, MAX_N - 1, now), r = firstEqual(1, 0, MAX_N - 1, now + 1) - 1;
ll toChange = nowoff + arr[i].second - l;
upd(1, 0, MAX_N - 1, nowoff, l - 1, 1);
upd(1, 0, MAX_N - 1, r - toChange + 1, r, 1);
//continue;
if(i == n - 1) {
for(int j = nowoff; j < offset; j ++) {
ll nnow = sum(1, 0, MAX_N - 1, j, j);
ret += (nnow * nnow - nnow) / 2ll;
}
}
}
cout << ret << endl;
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
12800 KB |
Output is correct |
2 |
Correct |
6 ms |
12800 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
12800 KB |
Output is correct |
2 |
Correct |
8 ms |
12832 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
7 ms |
12800 KB |
Output is correct |
2 |
Correct |
6 ms |
12800 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
8 ms |
12800 KB |
Output is correct |
2 |
Correct |
8 ms |
12928 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
12928 KB |
Output is correct |
2 |
Correct |
69 ms |
12928 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
39 ms |
12928 KB |
Output is correct |
2 |
Correct |
75 ms |
13568 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
78 ms |
13312 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
149 ms |
13696 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
248 ms |
14072 KB |
Output is correct |
2 |
Correct |
225 ms |
14976 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
255 ms |
14208 KB |
Output is correct |
2 |
Correct |
197 ms |
14968 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
294 ms |
14584 KB |
Output is correct |
2 |
Correct |
206 ms |
15488 KB |
Output is correct |