QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#605680 | #7859. Bladestorm | ucup-team4906# | TL | 118ms | 5716kb | C++20 | 4.8kb | 2024-10-02 18:33:37 | 2024-10-02 18:33:43 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define N 110000
#define M 350
int n, k;
int p[N];
namespace S1
{
int bel[N], L[M], R[M];
int nxt[N], w[N];
int fir[M];
int mxHP;
int BL, cnt;
bool vst[N];
void clear()
{
for (int i = 1; i <= n; i ++) nxt[i] = vst[i] = w[i] = bel[i] = 0;
for (int i = 1; i <= cnt; i ++) L[i] = R[i] = fir[i] = 0;
mxHP = BL = cnt = 0;
}
void upd(int t)
{
int l = L[t], r = R[t];
int nx = n + 1;
for (int i = t + 1; i <= cnt; i ++) if (fir[i]) {nx = fir[i]; break;}
for (int i = r; i >= l; i --)
{
if (nx - i > k)
{
if (nx > r) nxt[i] = nx, w[i] = 1;
else nxt[i] = nxt[nx], w[i] = w[nx] + 1;
}
else
{
if (i + k > r)nxt[i] = min(i + k, n + 1), w[i] = 1;
else nxt[i] = nxt[i + k], w[i] = w[i + k] + 1;
}
if (vst[i]) nx = i;
}
// cout << "??:" << l << ' ' << r << " " << t << endl;
// for (int i = l; i <= r; i ++) cout << nxt[i] << ' '; cout << endl;
// for (int i = l; i <= r; i ++) cout << w[i] << ' '; cout << endl;
// cout << endl;
}
int calc()
{
int now = 0, ans = 0;
int tnxt = 0;
for (int i = 1; i <= cnt; i ++) if (fir[i]) {tnxt = fir[i]; break;}
now = max(k, tnxt); ans = 1;
while (now < mxHP)
{
int nowr = 0;
if (nxt[now] >= mxHP)
{
for (int i = now + 1;; i ++) if (vst[i])
{
nowr = i; break;
}
nowr = max(nowr, now + k);
now = nowr; ans ++; continue;
}
ans += w[now]; now = nxt[now];
continue;
}
// cout << "EEE:" << ans << endl;
return ans;
}
void sol()
{
BL = cnt = sqrt(n);
for (int i = 1; i <= cnt; i ++)
{
L[i] = R[i - 1] + 1;
R[i] = L[i] + BL - 1;
}
if (R[cnt] < n) {++ cnt; L[cnt] = R[cnt - 1] + 1; R[cnt] = n;}
for (int i = 1; i <= cnt; i ++)
{
for (int j = L[i]; j <= R[i]; j ++) bel[j] = i;
}
for (int i = cnt; i >= 1; i --) upd(i);
for (int i = 1; i <= n; i ++)
{
int x = p[i];
if (fir[bel[x]]) fir[bel[x]] = min(fir[bel[x]], x);
else fir[bel[x]] = x;
mxHP = max(mxHP, x);
vst[x] = 1; upd(bel[x]);
if (bel[x] > 1)upd(bel[x] - 1);
cout << calc() << ' ';
}
cout << '\n';
clear();
}
}
namespace S2
{
bool vst[N];
int bel[N], L[M], R[M];
int s[N], tag[M];
int BL, cnt;
int mxHP;
void clear()
{
for (int i = 1; i <= n; i ++) vst[i] = bel[i] = s[i] = 0;
for (int i = 1; i <= cnt; i ++)tag[i] = L[i] = R[i] = 0;
BL = cnt = mxHP = 0;
}
void add(int x)
{
int t = bel[x];
for (int i = x; i <= R[t]; i ++)s[i] ++;
for (int i = t + 1; i <= cnt; i ++)tag[i] ++;
}
int qry(int x)
{
if (x == 0)return 0;
return s[x] + tag[bel[x]];
}
int qry(int l, int r)
{
r = min(r, n);
return qry(r) - qry(l - 1);
}
int calc()
{
int now = 0, ans = 0;
while (now < mxHP)
{
int rnow = now + k; ans ++;
if (qry(now + 1, rnow)) {now = rnow; continue;}
else
{
while (!vst[rnow]) rnow ++;
now = rnow; continue;
}
}
return ans;
}
void sol()
{
BL = cnt = sqrt(n);
for (int i = 1; i <= cnt; i ++)
{
L[i] = R[i - 1] + 1;
R[i] = L[i] + BL - 1;
}
if (R[cnt] < n) {++ cnt; L[cnt] = R[cnt - 1] + 1; R[cnt] = n;}
for (int i = 1; i <= cnt; i ++)
{
for (int j = L[i]; j <= R[i]; j ++) bel[j] = i;
}
for (int i = 1; i <= n; i ++)
{
mxHP = max(mxHP, p[i]);
add(p[i]);
vst[p[i]] = 1;
cout << calc() << ' ';
}
cout << '\n';
clear();
}
}
void sol()
{
cin >> n >> k;
for (int i = 1; i <= n; i ++) cin >> p[i];
//if (k < sqrt(n)) S1::sol();
//else S2::sol();
S2::sol();
}
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int T; cin >> T;
while (T --) sol();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3544kb
input:
3 7 2 4 7 3 6 1 2 5 11 3 10 7 4 9 6 8 5 1 3 2 11 9 2 1 2 3 7 8 9 4 5 6
output:
1 2 3 3 4 4 4 1 2 3 3 3 3 3 4 4 4 4 1 1 2 3 4 4 4 5 5
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 26ms
memory: 3684kb
input:
40319 1 1 1 2 1 1 2 2 1 2 1 2 2 1 2 2 2 2 1 3 1 1 2 3 3 1 1 3 2 3 1 2 1 3 3 1 2 3 1 3 1 3 1 2 3 1 3 2 1 3 2 1 2 3 3 2 1 3 2 3 2 2 1 3 3 2 2 3 1 3 2 3 1 2 3 2 3 2 1 3 3 1 2 3 3 3 1 3 2 3 3 2 1 3 3 3 2 3 1 3 3 3 1 2 3 3 3 2 1 4 1 1 2 3 4 4 1 1 2 4 3 4 1 1 3 2 4 4 1 1 3 4 2 4 1 1 4 2 3 4 1 1 4 3 2 4 1 ...
output:
1 1 2 1 2 1 1 1 1 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 1 2 1 2 2 1 1 2 1 2 2 1 2 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4...
result:
ok 40319 lines
Test #3:
score: 0
Accepted
time: 47ms
memory: 5716kb
input:
50000 10 2 9 3 1 10 2 4 6 5 7 8 10 5 8 3 4 1 2 7 5 9 10 6 10 7 6 7 5 9 1 4 10 2 8 3 10 10 3 1 10 2 6 8 9 4 5 7 10 7 8 9 7 5 6 2 1 10 3 4 10 1 7 1 10 8 9 3 4 6 2 5 10 1 6 7 4 10 3 5 8 9 1 2 10 9 4 6 9 7 3 8 5 1 10 2 10 4 2 6 9 3 10 5 1 4 7 8 10 1 7 4 10 3 6 9 2 5 1 8 10 6 9 5 2 3 1 8 10 7 6 4 10 4 3 ...
output:
1 2 3 4 4 4 5 5 5 5 1 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 2 2 1 2 3 3 3 3 3 3 3 3 1 2 3 4 5 6 7 8 9 10 1 2 2 2 2 2 2 2 2 2 1 1 2 2 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...
result:
ok 50000 lines
Test #4:
score: 0
Accepted
time: 118ms
memory: 5648kb
input:
5000 100 2 63 78 43 82 37 72 75 31 48 32 69 7 71 5 38 100 85 45 12 83 92 41 81 19 21 14 57 74 87 73 59 4 40 91 55 53 20 60 96 17 64 24 9 22 2 62 84 90 46 61 95 50 26 13 34 79 8 65 54 70 1 56 15 88 67 28 27 98 3 39 51 93 52 11 16 10 97 94 36 18 80 30 66 49 29 42 77 35 99 44 25 68 47 89 33 86 76 23 58...
output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 22 23 24 25 26 26 27 27 28 29 29 30 31 32 32 33 34 35 36 37 38 39 40 40 40 40 41 41 42 43 44 44 45 46 46 46 46 46 46 46 46 46 47 48 48 49 49 49 49 49 49 49 49 49 49 49 49 49 49 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 1 2 3 4 ...
result:
ok 5000 lines
Test #5:
score: 0
Accepted
time: 90ms
memory: 3608kb
input:
5000 100 3 23 52 62 18 85 78 19 65 26 46 100 33 57 32 3 13 12 16 81 75 72 2 92 22 80 95 60 45 94 24 43 73 67 35 77 15 25 47 56 28 48 36 10 59 93 27 9 34 54 58 55 91 87 31 76 42 11 68 96 97 89 83 79 74 20 8 7 70 38 84 6 64 63 99 53 98 49 66 90 30 69 40 50 61 37 1 39 29 5 4 82 44 41 86 51 14 21 88 17 ...
output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18 19 20 20 21 21 21 22 23 24 24 24 24 24 25 25 25 25 25 26 26 27 27 27 28 28 28 28 28 28 28 28 28 29 30 30 30 30 30 31 31 31 31 31 31 31 31 32 32 32 33 33 33 33 33 33 33 33 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 1 2 3 4 ...
result:
ok 5000 lines
Test #6:
score: 0
Accepted
time: 65ms
memory: 3612kb
input:
5000 100 8 69 26 68 33 32 41 79 80 22 43 94 31 87 15 7 11 25 4 28 12 13 19 83 48 40 60 76 58 34 81 93 10 55 37 3 59 71 89 49 52 21 82 2 85 84 62 16 45 57 36 39 51 95 50 70 30 42 47 77 64 23 88 1 91 63 61 97 73 67 9 99 53 100 54 18 29 96 72 75 35 98 56 92 46 6 27 65 74 20 86 14 38 78 44 17 66 90 5 8 ...
output:
1 2 3 4 4 5 6 6 7 7 8 8 9 10 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1 2 3 4 5 6 ...
result:
ok 5000 lines
Test #7:
score: 0
Accepted
time: 60ms
memory: 3708kb
input:
5000 100 8 66 22 6 89 68 15 82 100 62 26 43 79 76 47 32 25 27 33 50 75 77 92 42 40 11 81 54 31 28 7 87 58 96 45 21 91 97 98 13 86 69 19 10 61 72 44 36 24 51 64 55 14 34 46 2 65 59 41 17 5 74 18 57 20 94 3 90 88 78 12 93 8 48 85 37 80 95 9 71 52 83 35 73 56 60 84 39 30 16 49 38 23 1 70 4 53 29 99 63 ...
output:
1 2 3 4 5 6 7 8 8 9 10 11 11 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1 2 3 4 5...
result:
ok 5000 lines
Test #8:
score: 0
Accepted
time: 50ms
memory: 3680kb
input:
5000 100 8 25 36 39 50 79 40 3 19 91 97 72 6 62 54 33 66 78 26 45 13 43 12 95 94 89 17 70 41 65 52 4 5 21 90 82 68 67 63 83 11 99 57 84 85 98 1 87 74 14 35 31 37 10 30 80 81 60 88 56 32 86 96 53 61 58 71 38 48 55 44 8 24 64 75 9 22 93 34 2 47 100 46 15 23 73 28 76 16 29 49 7 18 51 92 59 77 42 69 20 ...
output:
1 2 3 4 5 5 6 7 8 9 10 10 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 1 2 2 3 3...
result:
ok 5000 lines
Test #9:
score: 0
Accepted
time: 116ms
memory: 3800kb
input:
50 10000 8 274 974 424 4088 762 1098 5354 5693 8734 243 1673 3993 972 5992 9422 4459 6504 4367 7594 9625 4021 7371 3760 1834 2602 5886 2573 5608 2338 5869 6036 4523 5430 9915 5902 979 6434 6013 8881 9136 7450 6065 9790 9051 9545 9938 8604 7526 5829 2766 1433 6053 9650 1712 5928 9002 3854 1152 2778 1...
output:
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 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 101 1...
result:
ok 50 lines
Test #10:
score: -100
Time Limit Exceeded
input:
5 100000 1 98420 62278 61893 21653 60003 72714 31478 93221 52310 28889 69896 3599 74920 72182 84226 27631 5337 74459 11956 99033 59122 23980 95516 12262 88093 55256 85020 35044 18848 86156 81566 44214 73514 22994 25629 83306 81401 39189 88840 6980 69761 54464 55186 76771 43620 59242 72845 61388 8089...
output:
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 101 102 ...