Submission #1601572
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int mx[N << 2], mn[N << 2], add[N << 2], val[N << 2];
#define mid ((l + r) >> 1)
int X, k, q, n;
vector< pair<int,int> > Z;
int pos[N];
int ans[N];
void push(int v, int l, int r) {
if (l > r) return;
if (l < r) {
if (val[v] == -1) {
add[v << 1] += add[v], add[v << 1 | 1] += add[v];
} else {
add[v << 1] = add[v], add[v << 1 | 1] = add[v];
val[v << 1] = val[v], val[v << 1 | 1] = val[v];
}
}
if (val[v] == -1) {
mx[v] += add[v], mn[v] += add[v];
} else {
mx[v] = mn[v] = val[v] + add[v];
}
val[v] = -1; add[v] = 0;
}
void upd(int v, int l, int r, int L, int R, int x, int type) {
push(v, l, r);
if (l > r || R < l || L > r) return;
if (L <= l && r <= R) {
if (type == 0) val[v] = x; else add[v] = x;
push(v, l, r);
return;
}
upd(v << 1, l, mid, L, R, x, type); upd(v << 1 | 1, mid + 1, r, L, R, x, type);
mx[v] = max(mx[v << 1], mx[v << 1 | 1]);
mn[v] = min(mn[v << 1], mn[v << 1 | 1]);
}
int lef(int v, int l, int r, int x) {
if (l == r) {
if (mn[v] >= x) return 0;
else return l;
}
push(v << 1, l, mid); push(v << 1 | 1, mid + 1, r);
if (mn[v << 1 | 1] < x) return lef(v << 1 | 1, mid + 1, r, x);
else return lef(v << 1, l, mid, x);
}
int rig(int v, int l, int r, int x) {
if (l == r) {
if (mx[v] <= x) return (q + 1);
else return l;
}
push(v << 1, l, mid); push(v << 1 | 1, mid + 1, r);
if (mx[v << 1] > x) return rig(v << 1, l, mid, x);
else return rig(v << 1 | 1, mid + 1, r, x);
}
int get(int v, int l, int r, int pos) {
push(v, l, r);
if (l > r || r < pos || l > pos) return 0;
if (l == r) return mx[v];
return max(get(v << 1, l, mid, pos), get(v << 1 | 1, mid + 1, r, pos));
}
struct query {
int time; int tp; int a; int id;
bool operator < (const query &other) const {
return time < other.time;
}
} v[N << 1];
void build(int v, int l, int r) {
if (l > r) return;
if (l == r) {
mx[v] = mn[v] = Z[l-1].first;
add[v] = 0; val[v] = -1;
return;
}
build(v << 1, l, mid); build(v << 1 | 1, mid + 1, r);
mx[v] = max(mx[v << 1], mx[v << 1 | 1]);
mn[v] = min(mn[v << 1], mn[v << 1 | 1]);
add[v] = 0; val[v] = -1;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> X >> k;
for (int i = 1; i <= k; ++i) cin >> v[i].time, v[i].tp = 'r';
cin >> q;
for (int i = 1 + k; i <= q + k; ++i) {
cin >> v[i].time >> v[i].a, v[i].tp = 't', v[i].id = i - k;
Z.push_back(make_pair(v[i].a, i - k));
}
sort(v + 1, v + k + q + 1);
sort(Z.begin(), Z.end());
for (int i = 0; i < (int)Z.size(); ++i) {
pos[Z[i].second] = i + 1;
}
build(1, 1, q);
n = k + q;
int upper = 1;
int lst = 0;
for (int i = 1; i <= n; ++i) {
int T = v[i].time - lst;
lst = v[i].time;
if (upper == 1) {
int ll = lef(1, 1, q, T);
upd(1, 1, q, 1, ll, 0, 0);
upd(1, 1, q, ll + 1, q, -T, 1);
} else {
int rr = rig(1, 1, q, X - T);
upd(1, 1, q, rr, q, X, 0);
upd(1, 1, q, 1, rr - 1, T, 1);
}
if (v[i].tp == 'r') upper ^= 1;
else {
ans[v[i].id] = get(1, 1, q, pos[v[i].id]);
}
}
for (int i = 1; i <= q; ++i) {
printf("%d\n", ans[i]);
}
}
Submission Info
Submission Time |
|
Task |
F - Sandglass |
User |
cheater2k |
Language |
C++14 (GCC 5.4.1) |
Score |
700 |
Code Size |
3259 Byte |
Status |
AC |
Exec Time |
207 ms |
Memory |
11380 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
700 / 700 |
Status |
|
|
Set Name |
Test Cases |
Sample |
0_000.txt, 0_001.txt, 0_002.txt |
All |
0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 1_026.txt, 1_027.txt, 1_028.txt, 1_029.txt, 1_030.txt, 1_031.txt, 1_032.txt, 1_033.txt, 1_034.txt, 1_035.txt, 1_036.txt, 1_037.txt, 1_038.txt, 1_039.txt, 1_040.txt, 1_041.txt |
Case Name |
Status |
Exec Time |
Memory |
0_000.txt |
AC |
2 ms |
6400 KB |
0_001.txt |
AC |
2 ms |
6400 KB |
0_002.txt |
AC |
2 ms |
6400 KB |
1_003.txt |
AC |
137 ms |
10612 KB |
1_004.txt |
AC |
137 ms |
10612 KB |
1_005.txt |
AC |
140 ms |
10612 KB |
1_006.txt |
AC |
141 ms |
10612 KB |
1_007.txt |
AC |
145 ms |
10612 KB |
1_008.txt |
AC |
149 ms |
10612 KB |
1_009.txt |
AC |
144 ms |
10612 KB |
1_010.txt |
AC |
151 ms |
10612 KB |
1_011.txt |
AC |
153 ms |
10612 KB |
1_012.txt |
AC |
143 ms |
10740 KB |
1_013.txt |
AC |
158 ms |
10740 KB |
1_014.txt |
AC |
161 ms |
10740 KB |
1_015.txt |
AC |
143 ms |
10868 KB |
1_016.txt |
AC |
151 ms |
10868 KB |
1_017.txt |
AC |
160 ms |
10868 KB |
1_018.txt |
AC |
144 ms |
10996 KB |
1_019.txt |
AC |
146 ms |
10996 KB |
1_020.txt |
AC |
159 ms |
10996 KB |
1_021.txt |
AC |
191 ms |
10868 KB |
1_022.txt |
AC |
146 ms |
10996 KB |
1_023.txt |
AC |
152 ms |
10996 KB |
1_024.txt |
AC |
207 ms |
10868 KB |
1_025.txt |
AC |
146 ms |
11124 KB |
1_026.txt |
AC |
148 ms |
11124 KB |
1_027.txt |
AC |
202 ms |
10868 KB |
1_028.txt |
AC |
198 ms |
10996 KB |
1_029.txt |
AC |
151 ms |
11252 KB |
1_030.txt |
AC |
204 ms |
10996 KB |
1_031.txt |
AC |
205 ms |
10996 KB |
1_032.txt |
AC |
148 ms |
11380 KB |
1_033.txt |
AC |
135 ms |
10740 KB |
1_034.txt |
AC |
104 ms |
10740 KB |
1_035.txt |
AC |
144 ms |
11124 KB |
1_036.txt |
AC |
134 ms |
10740 KB |
1_037.txt |
AC |
107 ms |
10740 KB |
1_038.txt |
AC |
147 ms |
11252 KB |
1_039.txt |
AC |
163 ms |
10484 KB |
1_040.txt |
AC |
111 ms |
10868 KB |
1_041.txt |
AC |
148 ms |
11380 KB |