QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#130268 | #5035. foo~ | pandapythoner | 10 | 150ms | 27132kb | C++20 | 7.2kb | 2023-07-23 19:09:09 | 2023-07-23 19:09:13 |
Judging History
answer
#ifdef LOCAL
#define _GLIBCXX_DEBUG
#else
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")
#endif
#include <bits/stdc++.h>
using namespace std;
#define ll int
#define flt double
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
mt19937 rnd(234);
struct SGT_add_max {
int n;
vector<ll> t;
vector<ll> d;
void upd(int v) {
t[v] = max(t[v + v], t[v + v + 1]) + d[v];
}
void apply(int v, ll x) {
t[v] += x;
d[v] += x;
}
void push(int v) {
return;
apply(v + v, d[v]);
apply(v + v + 1, d[v]);
d[v] = 0;
}
void build(int _n) {
n = _n;
t.assign(n * 4, 0);
d.assign(n * 4, 0);
}
void build(int v, int tl, int tr, const vector<int> &a) {
if (tl == tr) {
t[v] = a[tl];
return;
}
int tm = (tl + tr) / 2;
build(v + v, tl, tm, a);
build(v + v + 1, tm + 1, tr, a);
upd(v);
}
void build(const vector<int> &a) {
n = a.size();
t.assign(n * 4, 0);
d.assign(n * 4, 0);
build(1, 0, n - 1, a);
}
int add(int v, int tl, int tr, int l, int r, ll x) {
if (l <= tl && tr <= r) {
apply(v, x);
return t[v];
}
int tm = (tl + tr) / 2;
push(v);
int rs;
if (r <= tm) {
rs = add(v + v, tl, tm, l, r, x);
} else if (tm + 1 <= l || t[v + v] < t[v + v + 1]) {
rs = add(v + v + 1, tm + 1, tr, l, r, x);
} else {
rs = add(v + v + 1, tm + 1, tr, l, r, x);
if (rs < t[v + v]) {
rs = max(rs, add(v + v, tl, tm, l, r, x));
}
rs += d[v];
}
upd(v);
return rs;
}
int add(int l, int r, ll x) {
if (l > r) {
return 0;
}
return add(1, 0, n - 1, l, r, x);
}
void get(int v, int tl, int tr, ll r, int &mx, int dmx) {
if (t[v] + dmx <= mx) {
return;
}
if (tr <= r) {
mx = max(mx, t[v] + dmx);
return;
}
int tm = (tl + tr) / 2;
push(v);
if (r <= tm) {
get(v + v, tl, tm, r, mx, dmx + d[v]);
} else {
get(v + v, tl, tm, r, mx, dmx + d[v]);
get(v + v + 1, tm + 1, tr, r, mx, dmx + d[v]);
}
}
ll get(int l, int r) {
if (l > r) {
return 0;
}
int mx = 0;
get(1, 0, n - 1, r, mx, 0);
return mx;
}
};
int n, k;
vector<int> a;
ll solve_slow(vector<int> b) {
if (k == 1) {
int rs = 0;
int mx = -1;
int cnt = 0;
vector<int> stck;
for (int i = 0; i < n; i += 1) {
if (b[i] >= mx) {
cnt += 1;
mx = b[i];
}
rs = max(rs, cnt);
while (!stck.empty() && stck.back() < b[i]) {
stck.pop_back();
}
stck.push_back(b[i]);
rs = max(rs, (int)stck.size());
}
return rs;
}
vector<vector<int>> d(n + 1, vector<int>(n + 1, 0));
for (int l = 0; l <= n; l += 1) {
int mx = -1;
int cnt = 0;
for (int r = l + 1; r <= n; r += 1) {
if (b[r - 1] >= mx) {
mx = b[r - 1];
cnt += 1;
}
d[l][r] = max(d[l][r], cnt);
}
}
for (int r = n; r >= 0; r -= 1) {
int mx = -1;
int cnt = 0;
for (int l = r - 1; l >= 0; l -= 1) {
if (b[l] >= mx) {
mx = b[l];
cnt += 1;
}
d[l][r] = max(d[l][r], cnt);
}
}
vector<vector<int>> dp(n + 1, vector<int>(k + 1, -n));
dp[0][0] = 0;
int rs = 0;
for (int i = 1; i <= n; i += 1) {
for (int j = 0; j < i; j += 1) {
for (int c = 0; c < k; c += 1) {
dp[i][c + 1] = max(dp[i][c + 1], dp[j][c] + d[j][i]);
}
}
rs = max(rs, dp[i][k]);
}
return rs;
}
ll solve_slow() {
if (n == 1) {
return 1;
}
auto b = a;
int mx_i = 0;
for (int i = 1; i < n; i += 1) {
if (b[i] > b[mx_i]) {
mx_i = i;
}
}
rotate(b.begin(), b.begin() + mx_i, b.end());
ll rs = solve_slow(b);
rotate(b.begin(), b.begin() + 1, b.end());
reverse(all(b));
rs = max(rs, solve_slow(b));
/*
for(int itr = 0; itr < n; itr += 1){
rotate(b.begin(), b.begin() + 1, b.end());
rs = max(rs, solve_slow(b));
}
*/
return rs;
}
ll solve(vector<int> b) {
vector<int> dp(n + 1, -n * 10);
dp[0] = 0;
int rs = 0;
for (int itr = 0; itr < k; itr += 1) {
SGT_add_max sgt2;
sgt2.build(dp);
vector<pair<int, int>> stck;
vector<int> stck1;
stck1.push_back(-n);
stck.push_back(make_pair(n + 10, 0));
vector<int> ndp(n + 1, 0);
int pmx = 0;
int mx2 = 0;
for (int i = 1; i <= n; i += 1) {
int x = b[i - 1];
while (!stck.empty() && stck.back().first < x) {
// int pos = stck.back().second;
stck1.pop_back();
stck.pop_back();
}
int prvs_bgr = stck.back().second;
mx2 = max(mx2, sgt2.add(prvs_bgr, i - 1, 1));
stck.push_back(make_pair(x, i));
stck1.push_back(max(stck1.back() + 1, pmx + 1));
ndp[i] = max(stck1.back(), mx2);
rs = max(rs, ndp[i]);
pmx = max(pmx, dp[i]);
}
dp.swap(ndp);
}
return rs;
}
ll solve() {
if (n == 1) {
return 1;
}
auto b = a;
int mx_i = 0;
for (int i = 1; i < n; i += 1) {
if (b[i] > b[mx_i]) {
mx_i = i;
}
}
rotate(b.begin(), b.begin() + mx_i, b.end());
ll rs = solve(b);
rotate(b.begin(), b.begin() + 1, b.end());
reverse(all(b));
rs = max(rs, solve(b));
return rs;
}
void gen_test() {
n = rnd() % 7 + 1;
k = rnd() % n + 1;
a.resize(n);
for (int i = 0; i < n; i += 1) {
a[i] = i;
}
shuffle(all(a), rnd);
}
void print_test() {
cout << n << " " << k << "\n";
for (auto t : a) {
cout << t + 1 << " ";
}
cout << "\n";
}
void stress() {
int c = 0;
while (1) {
cout << ++c << "\n";
gen_test();
ll right_rs = solve_slow();
ll my_rs = solve();
if (right_rs != my_rs) {
print_test();
break;
}
}
}
int32_t main() {
// stress();
if (1) {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
cin >> n >> k;
a.resize(n);
for (int i = 0; i < n; i += 1) {
cin >> a[i];
--a[i];
}
ll rs = solve();
cout << rs << "\n";
return 0;
}
/*
7 2
6 5 1 7 3 2 4
*/
詳細信息
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 10
Accepted
time: 1ms
memory: 3504kb
input:
23 6 16 20 22 4 21 10 3 7 5 8 15 12 9 1 6 17 23 13 11 19 18 14 2
output:
20
result:
ok "20"
Test #2:
score: 0
Accepted
time: 1ms
memory: 3564kb
input:
13 6 13 9 3 4 12 6 5 1 8 10 11 7 2
output:
13
result:
ok "13"
Test #3:
score: 0
Accepted
time: 1ms
memory: 3564kb
input:
25 3 25 2 3 19 5 6 7 11 8 10 9 20 4 14 21 1 17 12 13 18 15 22 23 16 24
output:
16
result:
ok "16"
Test #4:
score: 0
Accepted
time: 1ms
memory: 3520kb
input:
25 9 1 11 10 23 9 24 7 8 19 3 5 21 18 12 15 16 17 13 2 20 14 22 4 6 25
output:
23
result:
ok "23"
Test #5:
score: 0
Accepted
time: 1ms
memory: 3500kb
input:
13 2 1 4 2 3 5 6 7 8 9 10 12 11 13
output:
12
result:
ok "12"
Test #6:
score: 0
Accepted
time: 1ms
memory: 3508kb
input:
17 5 4 2 3 6 5 1 7 8 13 16 11 12 9 14 15 10 17
output:
15
result:
ok "15"
Test #7:
score: 0
Accepted
time: 1ms
memory: 3568kb
input:
8 2 1 2 5 6 3 4 7 8
output:
8
result:
ok "8"
Test #8:
score: 0
Accepted
time: 1ms
memory: 3568kb
input:
11 5 3 11 2 10 6 5 1 4 8 7 9
output:
11
result:
ok "11"
Test #9:
score: 0
Accepted
time: 1ms
memory: 3616kb
input:
10 1 5 3 4 1 10 8 9 6 7 2
output:
6
result:
ok "6"
Test #10:
score: 0
Accepted
time: 1ms
memory: 3572kb
input:
16 2 15 12 14 9 11 13 1 3 10 8 5 2 16 4 6 7
output:
9
result:
ok "9"
Test #11:
score: 0
Accepted
time: 1ms
memory: 3500kb
input:
6 3 4 1 5 6 2 3
output:
6
result:
ok "6"
Test #12:
score: 0
Accepted
time: 0ms
memory: 3556kb
input:
1 1 1
output:
1
result:
ok "1"
Test #13:
score: 0
Accepted
time: 1ms
memory: 3508kb
input:
16 5 7 14 13 16 10 1 9 11 3 8 2 4 5 15 12 6
output:
14
result:
ok "14"
Test #14:
score: 0
Accepted
time: 1ms
memory: 3612kb
input:
10 3 10 1 7 2 8 6 9 5 4 3
output:
9
result:
ok "9"
Test #15:
score: -10
Wrong Answer
time: 1ms
memory: 3564kb
input:
23 9 12 11 22 2 5 9 1 4 18 19 17 16 23 20 6 13 8 21 10 7 14 15 3
output:
21
result:
wrong answer 1st words differ - expected: '23', found: '21'
Subtask #2:
score: 10
Accepted
Test #21:
score: 10
Accepted
time: 31ms
memory: 8020kb
input:
93943 1 87243 48984 50611 19218 77699 25025 85769 28141 13380 34875 42459 66419 53472 4367 48292 16894 92171 87263 42527 67085 30687 29235 27515 81053 31421 34864 83591 70491 75344 7026 50250 63402 26773 5330 36308 76399 80032 15501 16205 71750 73964 67876 68901 70548 2043 79979 89479 19784 38838 44...
output:
25
result:
ok "25"
Test #22:
score: 0
Accepted
time: 26ms
memory: 8908kb
input:
112118 1 24338 1586 3 108269 5 53472 80391 70331 9 15335 62487 28331 13 14 16564 94323 36681 108815 32632 44382 21 22 23 24 11758 40070 21518 51991 109983 30 45524 59784 33 2068 62111 36 37 38 39 89031 30508 42 43 16414 110006 34303 47 10331 44651 50 93957 95407 22019 88681 56605 12426 28498 58 59 8...
output:
281
result:
ok "281"
Test #23:
score: 0
Accepted
time: 121ms
memory: 23104kb
input:
391400 1 158965 280194 3 4 5 369036 92293 245923 57403 10 6887 280754 277300 110148 314164 135940 17 46573 126951 111447 301107 22 23 24 25 26 247952 28 342994 339309 23647 350245 33 299608 35 36 37 263236 232063 40 41 42 43 44 39280 46 299122 11961 380375 384513 51 318009 162567 54 55 56 27356 58 6...
output:
693
result:
ok "693"
Test #24:
score: 0
Accepted
time: 144ms
memory: 25680kb
input:
440571 1 243784 2 3 130039 61385 6 7 8 244611 260729 29014 12 326371 416098 15 293728 182717 66822 387603 156910 225815 413135 171756 315815 26444 302419 384825 37746 17634 391896 354575 426625 290920 34 49456 36 161212 212843 39 40 41 436888 43 102088 405279 46 47 77451 49 50 368530 52402 34143 54 ...
output:
665
result:
ok "665"
Test #25:
score: 0
Accepted
time: 72ms
memory: 15320kb
input:
237580 1 1 2 3 4 5 45736 171997 8 235046 10 11 186778 13 14 15 16 17 18 19 20 21 22 23 91724 25 147783 27 125261 29 30 27556 32 108919 76675 35 36 18966 212471 100584 11715 204252 77843 43 176763 18552 46 82644 48 49 50 51 191552 53 232631 160703 114013 69672 75193 59 60 207114 62 63 167312 83372 66...
output:
890
result:
ok "890"
Test #26:
score: 0
Accepted
time: 27ms
memory: 8608kb
input:
108629 1 1 2 3 35575 5 7205 104276 8 9 10 104552 12 13 99818 15 16 17 18 19 16579 21 74459 23 24 25 98758 27 30553 28622 105401 31 32 33 98277 29214 36 37 38 34671 99851 41 42 20159 65626 49334 58829 47 48 15553 50 16448 157 96610 71139 51449 24593 66195 11741 5738 45685 61 76006 91433 64 13205 66 6...
output:
549
result:
ok "549"
Test #27:
score: 0
Accepted
time: 1ms
memory: 3928kb
input:
7474 1 6087 2 3 3276 2246 1022 4790 8 9 10 11 3555 13 14 5187 16 17 18 5222 2852 21 3905 23 2069 25 26 27 6248 29 30 31 32 33 3467 35 5413 37 38 39 40 41 42 43 44 45 46 47 6366 6217 6683 4855 86 6754 7423 55 56 3421 58 7129 6415 2719 964 63 7191 6681 5871 2830 68 1114 70 71 4387 73 74 75 76 77 394 7...
output:
117
result:
ok "117"
Test #28:
score: 0
Accepted
time: 108ms
memory: 19920kb
input:
327474 1 210193 138271 6815 114087 210548 236834 247829 287541 142327 57519 226037 185228 4602 111639 172642 13926 122775 323427 276201 198051 175153 262523 182602 84772 315273 161585 146845 231049 98201 170526 58890 213780 86346 161912 320369 55154 202159 224318 92082 314469 92925 225630 89586 2190...
output:
31
result:
ok "31"
Test #29:
score: 0
Accepted
time: 58ms
memory: 11852kb
input:
170736 1 1312 68283 94512 153956 14227 44793 18760 153190 59267 3745 39898 34452 88526 153153 151245 72089 72230 139449 97869 105574 61308 52310 63909 66185 76461 57922 15750 32965 63821 123214 62562 154258 26229 154847 29694 20613 163634 112566 78733 77415 148297 8311 18695 146847 137996 128167 946...
output:
27
result:
ok "27"
Test #30:
score: 0
Accepted
time: 20ms
memory: 6760kb
input:
70972 1 42126 45376 26395 39090 6557 69493 22740 10263 3057 30503 16364 27796 52951 62922 17830 66723 34385 8039 28194 11087 10500 9835 5892 8917 21894 16673 49698 55082 66683 54472 60557 6953 739 65333 59825 23918 39644 59672 59765 31158 30188 37359 60653 64449 28747 7064 53759 15156 11687 33993 33...
output:
25
result:
ok "25"
Test #31:
score: 0
Accepted
time: 150ms
memory: 27132kb
input:
471980 1 315450 386066 223827 468592 231628 77257 181339 466496 85446 27241 269600 85959 141799 29249 162311 264524 137245 205794 349273 166576 131873 5521 368496 302373 19082 283842 82343 281817 25429 161084 307699 192224 143156 188759 279732 138312 341989 400389 280646 404120 362537 182646 194306 ...
output:
32
result:
ok "32"
Test #32:
score: 0
Accepted
time: 64ms
memory: 13584kb
input:
141837 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100...
output:
141837
result:
ok "141837"
Test #33:
score: 0
Accepted
time: 23ms
memory: 6532kb
input:
48198 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ...
output:
48198
result:
ok "48198"
Test #34:
score: 0
Accepted
time: 10ms
memory: 5068kb
input:
28730 1 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173...
output:
14366
result:
ok "14366"
Test #35:
score: 0
Accepted
time: 25ms
memory: 8624kb
input:
89450 1 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 151 153 155 157 159 161 163 165 167 169 171 173...
output:
44726
result:
ok "44726"
Subtask #3:
score: 0
Wrong Answer
Test #36:
score: 0
Wrong Answer
time: 10ms
memory: 3648kb
input:
1992 25 144 612 1315 1966 1779 1773 1529 625 36 1849 1783 1441 1388 1558 1258 724 137 397 542 353 1162 1213 406 792 1317 882 994 298 1864 1969 103 449 508 1501 89 1721 195 778 657 222 1152 1780 613 743 1206 694 829 142 69 1973 1465 1343 655 1540 155 146 350 491 759 1695 1082 1357 1329 1745 232 1850 ...
output:
232
result:
wrong answer 1st words differ - expected: '237', found: '232'
Subtask #4:
score: 0
Skipped
Dependency #1:
0%
Subtask #5:
score: 0
Skipped
Dependency #4:
0%
Subtask #6:
score: 0
Skipped
Dependency #2:
100%
Accepted
Dependency #5:
0%