UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#192816#2441. 物品tkswls1001453ms39544kbC++1.8kb2023-10-12 08:26:512023-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