QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#67832 | #4583. Concerto de Pandemic | karuna | WA | 1325ms | 135076kb | C++17 | 4.2kb | 2022-12-12 15:22:53 | 2022-12-12 15:22:57 |
Judging History
answer
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;
const int N = 202020;
typedef long long ll;
int n, m, k, p, t[N], d[N], l[N], r[N];
ll pl[20][N], pr[20][N], cl[20][N], cr[20][N];
pair<int, int> V[2 * N], stk[N];
int main() {
cin.tie(0); ios_base::sync_with_stdio(0);
cin >> n >> m >> k >> p;
for (int i = 0; i < m; i++) {
int x; cin >> x;
cin >> t[x - 1];
}
for (int i = 0; i < k; i++) {
cin >> d[i];
d[i]--;
}
sort(d, d + k);
ll s = 0;
for (int i = 0, r = 0; i < n; i++) {
if (i != 0) s -= t[i] + 1;
if (r == i) {
r = (r + 1) % n;
s += t[r] + 1;
}
while (r != i && t[r]) {
r = (r + 1) % n;
s += t[r] + 1;
}
cr[0][i] = s;
pr[0][i] = r;
}
s = 0;
for (int i = n - 1, l = n - 1; i >= 0; i--) {
if (i != n - 1) s -= t[i] + 1;
if (l == i) {
l = (l + n - 1) % n;
s += t[l] + 1;
}
while (l != i && t[l]) {
l = (l + n - 1) % n;
s += t[l] + 1;
}
cl[0][i] = s;
pl[0][i] = l;
}
for (int j = 1; j < 20; j++) for (int i = 0; i < n; i++) {
cl[j][i] = cl[j - 1][i] + cl[j - 1][pl[j - 1][i]];
cr[j][i] = cr[j - 1][i] + cr[j - 1][pr[j - 1][i]];
pl[j][i] = pl[j - 1][pl[j - 1][i]];
pr[j][i] = pr[j - 1][pr[j - 1][i]];
}
ll L = 0, R = 1e10;
while (L < R) {
ll M = (L + R) / 2;
int sz = 0;
for (int i = 0; i < k; i++) {
ll x = M, y = M, l = 0, r = 0;
int p = d[i], q = d[i];
for (int j = 19; j >= 0; j--) {
if (cl[j][p] <= x) {
x -= cl[j][p];
p = pl[j][p];
l ^= 1 << j;
}
if (cr[j][q] <= y) {
y -= cr[j][q];
q = pr[j][q];
r ^= 1 << j;
}
}
if (l + r >= n - 1) continue;
V[sz++] = {p, q};
}
if (sz == 0) {
R = M; continue;
}
// cout << M << "!\n";
// for (auto [l, r] : V) {
// cout << l << ' '<< r << '\n';
// }
int x = 0;
while (x < sz && V[x].first > V[x].second) {
++x;
}
for (int i = 0; i < x; i++) {
V[sz + i] = V[i];
}
for (int i = 0; i < sz; i++) {
swap(V[i], V[i + x]);
}
int tz = 0;
for (int i = 0; i < sz; i++) {
auto [l, r] = V[i];
if (r < l) r += n;
// cout << l << ' ' << r << "?\n";
while (tz != 0 && stk[tz - 1].second >= r) {
--tz;
}
stk[tz++] = {l, r};
}
int rend = -1, lend = n + 1;
int ans = 0;
for (int i = 0; i < tz; i++) {
if (stk[i].second >= n) continue;
if (rend < stk[i].first) {
++ans;
rend = stk[i].second;
}
}
for (int i = tz - 1; i >= 0; i--) {
if (stk[i].second >= n) continue;
if (lend > stk[i].second) {
lend = stk[i].first;
}
}
// cout << lend << ' ' << rend << "!!\n";
if (lend == -1 || rend == -1) {
ans = 1;
}
else if (ans == 1) {
auto [a, b] = stk[0];
auto [c, d] = stk[tz - 1];
if (b < c) {
ans = 2;
}
}
else {
bool f = true;
for (int i = 0; i < tz; i++) {
if (stk[i].second < n) continue;
auto [r, l] = stk[i];
l -= n;
if (l < lend && r > rend) {
f = false;
}
}
ans += (!f);
}
if (ans <= p) R = M;
else L = M + 1;
}
cout << L;
}
詳細信息
Test #1:
score: 100
Accepted
time: 2ms
memory: 13920kb
input:
10 4 3 2 1 2 4 4 6 2 7 5 2 5 8
output:
4
result:
ok single line: '4'
Test #2:
score: 0
Accepted
time: 1ms
memory: 15884kb
input:
8 1 3 5 1 5 4 2 7
output:
0
result:
ok single line: '0'
Test #3:
score: 0
Accepted
time: 4ms
memory: 14048kb
input:
5 2 2 1 1 14 2 14 3 5
output:
1
result:
ok single line: '1'
Test #4:
score: 0
Accepted
time: 4ms
memory: 13836kb
input:
2 1 1 1 1 200000 2
output:
0
result:
ok single line: '0'
Test #5:
score: 0
Accepted
time: 674ms
memory: 126756kb
input:
190976 113222 55610 23475 51263 120558 10007 171596 46671 108981 117183 169457 18187 84735 149298 124718 79376 129184 28117 76880 109791 87521 114840 59510 38014 178362 41701 11344 27561 192741 173835 54534 71368 76692 122745 95537 152595 158352 43901 162441 98927 105784 22484 96000 19443 113614 370...
output:
170531
result:
ok single line: '170531'
Test #6:
score: 0
Accepted
time: 1325ms
memory: 135076kb
input:
198722 26425 169256 110599 33948 74442 51729 66300 40369 173859 42274 73043 117803 108716 149794 151005 147161 2675 148063 166634 132585 51612 141999 182365 32951 159790 120932 290 82655 150138 49337 10396 171146 129572 33311 193079 195115 171691 180568 77905 65397 110312 156436 149966 9377 55490 12...
output:
1
result:
ok single line: '1'
Test #7:
score: 0
Accepted
time: 224ms
memory: 133196kb
input:
200000 150000 50000 24998 187150 200000 81420 200000 167617 200000 100616 200000 135362 200000 156943 200000 83069 200000 48837 200000 179969 200000 138130 200000 133131 200000 196045 200000 169575 200000 163857 200000 106717 200000 191966 200000 131394 200000 145647 200000 160212 200000 75181 20000...
output:
200002
result:
ok single line: '200002'
Test #8:
score: 0
Accepted
time: 240ms
memory: 132708kb
input:
200000 150000 50000 2 99352 200000 85760 200000 126279 200000 78681 200000 191980 200000 123278 200000 90780 200000 183926 200000 92668 200000 92156 200000 157074 200000 104604 200000 87593 200000 183454 200000 38009 200000 132806 200000 96071 200000 135445 200000 123768 200000 80039 200000 199215 2...
output:
1250012500
result:
ok single line: '1250012500'
Test #9:
score: 0
Accepted
time: 51ms
memory: 132240kb
input:
200000 199999 1 1 44417 200000 47743 200000 134710 200000 118852 200000 9605 200000 150296 200000 80589 200000 3336 200000 66496 200000 90172 200000 190899 200000 3355 200000 107595 200000 111949 200000 146872 200000 72419 200000 115626 200000 127077 200000 173509 200000 194749 200000 109608 200000 ...
output:
0
result:
ok single line: '0'
Test #10:
score: 0
Accepted
time: 709ms
memory: 134200kb
input:
200000 100000 100000 25746 186550 200000 85622 200000 21024 200000 59750 200000 76456 200000 87534 200000 76522 200000 103422 200000 165806 200000 138372 200000 166050 200000 176354 200000 15168 200000 69928 200000 187102 200000 130486 200000 182278 200000 161502 200000 95032 200000 119864 200000 17...
output:
400004
result:
ok single line: '400004'
Test #11:
score: 0
Accepted
time: 57ms
memory: 132644kb
input:
200000 199990 10 9 185044 200000 96615 200000 172973 200000 82849 200000 162889 200000 59668 200000 20522 200000 193263 200000 70559 200000 140931 200000 147680 200000 26312 200000 133330 200000 74332 200000 149589 200000 61277 200000 173461 200000 152403 200000 174666 200000 56706 200000 9288 20000...
output:
3865019326
result:
ok single line: '3865019326'
Test #12:
score: -100
Wrong Answer
time: 40ms
memory: 131396kb
input:
200000 199998 2 1 67932 200000 165398 200000 653 200000 12879 200000 179014 200000 173052 200000 19237 200000 31754 200000 83892 200000 67089 200000 172429 200000 20736 200000 19809 200000 195941 200000 165861 200000 192485 200000 50670 200000 154401 200000 183669 200000 160442 200000 96158 200000 4...
output:
10000000000
result:
wrong answer 1st lines differ - expected: '19999900000', found: '10000000000'