ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#192816 | #2441. 物品 | tkswls | 100 | 1453ms | 39544kb | C++ | 1.8kb | 2023-10-12 08:26:51 | 2023-10-12 12:01:32 |
answer
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n, m;
struct node {
int a, w, name;
} a[500005], c[500005];
int t[500005];
bool comp1(node p, node q) {
return p.w < q.w;
}
bool comp2(node p, node q) {
return p.a < q.a;
}
struct SGT {
int suma, l, r;
ll sumb;
} b[2000006];
inline void update(int p) {
b[p].suma = b[2 * p].suma + b[2 * p + 1].suma;
b[p].sumb = b[2 * p].sumb + b[2 * p + 1].sumb;
}
inline void build(int p, int l, int r) {
b[p].l = l;
b[p].r = r;
if (l == r) {
b[p].suma = 1;
b[p].sumb = a[l].w;
return;
}
build(2 * p, l, (l + r) >> 1);
build(2 * p + 1, ((l + r) >> 1) + 1, r);
update(p);
}
inline void change(int p, int q) {
if (b[p].l == b[p].r) {
b[p].suma = b[p].sumb = 0;
return;
}
if (q <= (b[p].l + b[p].r) >> 1) change(2 * p, q);
else change(2 * p + 1, q);
update(p);
}
inline int query(int p, int q) {
if (b[p].sumb <= q) return b[p].suma;
if (b[p].l == b[p].r) return 0;
if (b[2 * p].sumb < q) return query(2 * p + 1, q - b[2 * p].sumb) + b[2 * p].suma;
return query(2 * p, q);
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i].a >> a[i].w;
a[i].name = i;
c[i] = a[i];
}
sort(a + 1, a + n + 1, comp1);
sort(c + 1, c + n + 1, comp2);
for (int i = 1; i <= n; i++) {
t[a[i].name] = i;
}
int ct = 0, ans = 0, cnt, op;
build(1, 1, n);
for (int i = 1; i <= n; i++) {
while (ct < n && c[ct + 1].a < i) {
change(1, t[c[ct + 1].name]);
ct++;
}
op = min(i, query(1, m));
if (op > ans) {
ans = op;
cnt = i;
}
}
cout << ans << "\n" << cnt << "\n";
op = cnt;
for (int i = 1; i <= n, op != 0; i++) {
if (a[i].a >= cnt) {
op--;
cout << a[i].name << ' ';
}
}
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 0ms
memory: 1300kb
input:
18 1024 8 3 8 1 16 9 17 6 2 5 12 3 1 7 7 9 17 1 14 3 2 7 17 5 2 3 2 5 2 10 8 3 2 3 17 5
output:
8 8 2 9 10 16 1 6 12 18
result:
points 1.0 Correct
Test #2:
score: 10
Accepted
time: 0ms
memory: 1300kb
input:
20 79841 15 4337 9 6289 7 9927 12 1468 7 9390 12 9228 7 5646 8 3438 3 1614 3 7048 10 8840 15 2349 16...
output:
10 10 4 12 14 1 13 20 19 11 6 17
result:
points 1.0 Correct
Test #3:
score: 10
Accepted
time: 2ms
memory: 1448kb
input:
1888 987654 1082 243 1341 309 1524 959 324 593 894 952 1428 587 1367 91 1669 683 616 866 958 791 172...
output:
949 949 909 1341 231 1327 335 1259 892 873 1671 1070 1872 452 339 501 258 1027 793 1067 1740 665 851...
result:
points 1.0 Correct
Test #4:
score: 10
Accepted
time: 0ms
memory: 1452kb
input:
1999 12000000 1112 2799 524 6890 686 6713 1803 4478 940 4341 1391 8972 953 592 454 7711 524 8224 127...
output:
978 978 53 174 195 1092 1807 517 789 1823 1014 991 423 1060 1800 350 769 1484 1428 1739 704 795 492 ...
result:
points 1.0 Correct
Test #5:
score: 10
Accepted
time: 0ms
memory: 1456kb
input:
2000 9788123 296 3976 154 3441 78 9146 1443 6444 1799 2843 1482 6843 1526 3159 1956 9324 1442 1001 5...
output:
997 997 725 67 1669 1837 1146 694 38 223 1735 1651 1228 358 1005 811 1395 1180 1094 1150 1697 1008 1...
result:
points 1.0 Correct
Test #6:
score: 10
Accepted
time: 140ms
memory: 19064kb
input:
200000 87654321 33240 503 90721 868 64272 858 170928 616 92246 213 50575 59 148252 954 87639 739 328...
output:
100168 100168 73693 2146 34184 78313 184317 86718 9998 92978 67876 165591 151230 141220 61386 154752...
result:
points 1.0 Correct
Test #7:
score: 10
Accepted
time: 131ms
memory: 19064kb
input:
200000 987654321 199051 7573 6332 5631 35615 9816 185684 9227 198894 8029 185684 2173 54203 2887 107...
output:
98978 98978 42096 30257 96841 74944 23020 162221 198760 134505 130989 114816 197 26517 160938 59838 ...
result:
points 1.0 Correct
Test #8:
score: 10
Accepted
time: 361ms
memory: 38032kb
input:
444444 998244353 243276 2272 436596 1761 70822 1547 263965 942 280972 2658 87160 421 268504 2945 103...
output:
222615 222615 317639 191215 80924 243074 69477 223986 107338 169919 378635 278320 327893 422528 2076...
result:
points 1.0 Correct
Test #9:
score: 10
Accepted
time: 388ms
memory: 39544kb
input:
500000 999999999 131412 807 486292 804 462352 1139 52896 196 426775 1655 18059 2099 224414 1308 2851...
output:
254580 254580 357419 85619 58426 29508 162688 167478 184404 152285 111786 355073 229362 155356 34846...
result:
points 1.0 Correct
Test #10:
score: 10
Accepted
time: 431ms
memory: 39544kb
input:
500000 1000000000 42362 5090 327916 7618 221602 679 295161 1419 69703 4221 108614 6788 210597 6940 2...
output:
231450 231450 172777 55924 11704 458550 129939 117246 162184 154947 146074 196948 60258 428396 16974...
result:
points 1.0 Correct