QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#456209 | #964. Excluded Min | lopzith | TL | 5ms | 21516kb | C++14 | 2.6kb | 2024-06-27 14:01:24 | 2024-06-27 14:01:25 |
Judging History
answer
#include <bits/stdc++.h>
const int N = 5e5 + 5;
const int M = 5e5 + 1;
int n, q, B, a[N], ans[N];
std::array<int, 3> Q[N];
#define lc (p << 1)
#define rc (p << 1 | 1)
struct SegmentTree
{
int mx[N << 2], tag[N << 2];
void upd(int p) { mx[p] = std::max(mx[lc], mx[rc]); }
void build(int p, int L, int R)
{
if (L == R) return mx[p] = -L, tag[p] = 0, void();
int mid = (L + R) >> 1;
build(lc, L, mid), build(rc, mid + 1, R);
upd(p);
}
void pushdown(int p)
{
if (tag[p])
{
int t = tag[p]; tag[p] = 0;
mx[lc] += t, mx[rc] += t;
tag[lc] += t, tag[rc] += t;
}
}
void modify(int p, int L, int R, int l, int r, int x)
{
if (l <= L && R <= r) return mx[p] += x, tag[p] += x, void();
int mid = (L + R) >> 1; pushdown(p);
if (l <= mid) modify(lc, L, mid, l, r, x);
if (r >= mid + 1) modify(rc, mid + 1, R, l, r, x);
upd(p);
}
int qry(int p, int L, int R)
{
if (L == R) return L;
int mid = (L + R) >> 1; pushdown(p);
if (mx[rc] >= 0) return qry(rc, mid + 1, R);
else return qry(lc, L, mid);
}
} T;
inline void add(int x)
{
T.modify(1, 0, M, x + 1, M, 1);
}
inline void del(int x)
{
T.modify(1, 0, M, x + 1, M, -1);
}
signed main()
{
// freopen("set3.in", "r", stdin);
// freopen("tst.out", "w", stdout);
std::ios::sync_with_stdio(false); std::cin.tie(nullptr);
std::cin >> n >> q;
for (int i = 1; i <= n; i++) std::cin >> a[i];
// for (int i = 401814; i <= 417313; i++) printf("%d ", a[i]);
// return 0;
for (int i = 1; i <= q; i++)
{
int l, r; std::cin >> l >> r;
Q[i] = {l, r, i};
} T.build(1, 0, M);
B = std::max(1, (int)sqrt(n));
std::sort(Q + 1, Q + q + 1, [](std::array<int, 3> x, std::array<int, 3> y)
{
int posx = x[0] / B, posy = y[0] / B;
if (posx == posy) return ((posx & 1) ? x[1] < y[1] : x[1] > y[1]);
return posx < posy;
});
int l = 1, r = 0;
for (int i = 1; i <= q; i++)
{
int L = Q[i][0], R = Q[i][1], id = Q[i][2];
while (l > L) l--, add(a[l]);
while (r < R) r++, add(a[r]);
while (l < L) del(a[l]), l++;
while (r > R) del(a[r]), r--;
ans[id] = T.qry(1, 0, M);
}
for (int i = 1; i <= q; i++) printf("%d\n", ans[i]);
std::cerr << "Time = " << (double)clock() / CLOCKS_PER_SEC << "s" << std::endl;
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 19828kb
input:
3 3 0 0 2 1 3 2 3 3 3
output:
3 1 0
result:
ok 3 number(s): "3 1 0"
Test #2:
score: 0
Accepted
time: 0ms
memory: 18412kb
input:
3 2 1 2 2 1 2 1 3
output:
0 3
result:
ok 2 number(s): "0 3"
Test #3:
score: 0
Accepted
time: 4ms
memory: 18300kb
input:
10 10 3 0 3 3 9 7 9 6 0 7 3 3 9 9 4 6 1 9 3 4 2 4 7 10 3 7 5 7 2 7
output:
0 1 0 5 0 1 1 0 0 1
result:
ok 10 numbers
Test #4:
score: 0
Accepted
time: 0ms
memory: 18516kb
input:
10 10 3 0 0 0 5 1 1 1 2 1 1 2 8 8 5 7 1 7 2 2 1 5 5 6 4 6 3 10 6 8
output:
1 0 2 7 1 4 0 2 8 3
result:
ok 10 numbers
Test #5:
score: 0
Accepted
time: 4ms
memory: 18640kb
input:
100 100 15 82 7 39 63 55 64 99 71 63 32 99 67 94 3 43 15 75 45 55 53 4 35 36 15 40 82 20 62 43 6 83 27 95 27 45 98 44 35 98 39 7 17 32 76 7 40 16 40 63 13 8 22 27 11 12 61 14 19 45 100 97 90 88 22 59 25 63 4 25 65 16 22 92 84 44 99 66 89 26 93 97 35 97 92 1 32 40 97 97 78 43 7 12 23 53 61 74 33 90 1...
output:
68 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
result:
ok 100 numbers
Test #6:
score: 0
Accepted
time: 5ms
memory: 21416kb
input:
100 100 17 86 33 8 11 27 8 11 13 9 3 43 11 23 26 42 44 12 44 12 15 0 75 51 72 5 49 2 40 57 24 47 39 42 4 5 6 52 3 2 42 19 62 33 24 22 16 69 4 33 44 70 29 11 2 2 58 9 6 10 25 10 33 26 17 3 14 0 48 7 48 51 0 39 54 37 14 9 3 85 18 4 25 9 2 0 39 8 17 13 25 45 10 39 12 18 9 5 66 6 13 89 10 90 42 67 43 52...
output:
76 80 0 0 18 1 18 1 5 5 1 1 22 11 0 15 0 59 5 56 1 80 0 1 1 21 0 61 22 11 0 3 8 15 40 1 8 81 71 20 2 0 60 0 60 31 0 59 0 0 0 28 0 21 1 7 5 0 31 0 76 28 0 0 27 1 23 0 1 27 1 0 0 1 0 5 63 52 2 43 73 1 86 0 61 0 27 2 30 5 31 1 0 14 59 27 1 1 67 63
result:
ok 100 numbers
Test #7:
score: 0
Accepted
time: 4ms
memory: 21516kb
input:
100 100 6 1 1 5 13 11 35 5 3 2 0 4 0 9 1 2 3 3 19 1 7 9 7 11 7 8 10 18 28 17 31 2 4 8 2 3 3 2 22 4 9 4 7 2 9 15 8 2 3 19 5 24 3 10 11 5 9 20 8 4 11 10 18 9 13 34 5 34 2 9 24 6 21 16 6 12 26 2 2 2 6 11 2 14 3 8 2 12 2 19 8 3 18 23 5 21 23 8 4 0 44 67 25 74 24 79 59 73 4 81 42 66 48 55 15 38 35 63 16 ...
output:
22 50 56 0 78 23 0 22 29 24 38 37 17 57 0 6 0 58 52 4 64 44 0 37 75 75 34 89 0 4 0 12 39 0 0 69 53 14 38 13 36 30 0 7 46 83 28 6 44 22 40 50 24 26 36 49 0 0 6 49 27 78 0 37 11 49 16 50 25 30 37 58 64 28 62 36 0 52 0 95 34 4 50 17 0 27 44 0 0 21 44 66 69 0 39 25 0 2 63 0
result:
ok 100 numbers
Test #8:
score: 0
Accepted
time: 4ms
memory: 18292kb
input:
100 100 0 1 0 1 0 1 1 1 0 2 1 1 2 0 1 1 0 3 0 0 0 0 0 0 0 0 1 2 2 0 0 0 0 1 0 0 1 2 0 0 1 0 0 3 0 1 0 0 3 0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 2 0 0 0 4 0 1 1 0 1 0 2 2 0 0 1 41 53 31 36 78 99 60 86 1 67 3 92 89 92 60 70 42 56 42 46 39 84 40 66 9 27 75 78 33 94 17 53...
output:
13 6 22 27 67 90 3 11 15 5 46 27 19 4 62 37 84 35 53 4 47 95 55 63 24 39 22 51 67 21 55 36 24 16 33 74 4 16 63 81 41 14 3 54 6 40 36 33 29 32 14 60 13 17 73 44 34 2 14 79 59 13 75 72 31 10 22 57 23 37 74 2 6 6 38 5 4 62 66 22 33 0 23 21 12 54 75 6 8 16 37 36 3 53 63 18 67 60 31 19
result:
ok 100 numbers
Test #9:
score: -100
Time Limit Exceeded
input:
300000 300000 216504 101790 177261 84423 215788 67188 170620 125383 222808 149722 190483 152974 27524 172557 109218 201761 138030 177265 270417 244027 29296 13565 108388 270622 75102 137755 134081 21988 249714 268911 178911 39288 197287 232628 152784 226739 40134 213404 230781 181323 235763 55745 44...