| 18653 | 2025-10-29 18:52:06 | lalala | Alíz házi feladatai | cpp17 | Accepted 100/100 | 291ms | 26376 KiB |
// @check-accepted: *
#include <iostream>
#include <algorithm>
using namespace std;
const int c=550005;
long long n, m, t[c], h[c]; // feladatok szama, ido, feladat hossza, hatarido
long long sor1[c], sor2[c], inv2[c], spec[c]; // t illetve h szerint rendeze
bool cmp1(int a, int b) {
return (t[a]<t[b]);
}
bool cmp2(int a, int b) {
return (h[a]<h[b]);
}
long long fen[c], db[c];
long long bal[c], jobb[c], mini[c], sum[c];
int lsb(int a) {
return (a & -a);
}
void add(int a, int b, long long mul) {
while (a<=n) {
fen[a]+=b*mul;
db[a]+=mul;
a+=lsb(a);
}
}
long long ask(long long val) {
int ans=0, pos=0;
for (int i=19; i>=0; i--) {
int kov=pos+(1<<i);
if (kov<=n && fen[kov]<=val) {
val-=fen[kov];
pos=kov;
ans+=db[kov];
}
}
return ans;
}
void range_add(int a, int l, int r, long long val) {
if (bal[a]>r || jobb[a]<l) {
return;
}
if (l<=bal[a] && jobb[a]<=r) {
sum[a]+=val;
mini[a]+=val;
return;
}
int x=2*a, y=2*a+1;
range_add(x, l, r, val), range_add(y, l, r, val);
mini[a]=sum[a]+min(mini[x], mini[y]);
}
int solve_nlogn() {
for (int i=1; i<=n; i++) {
sor1[i]=i, sor2[i]=i;
}
sort(sor1+1, sor1+n+1, cmp1), sort(sor2+1, sor2+n+1, cmp2);
for (int i=1; i<=n; i++) {
inv2[sor2[i]]=i;
}
for (int i=1; i<=n; i++) {
long long val=t[sor1[i]];
add(i, val, 1);
}
int pos=1;
int po=1;
while (po<n) {
po*=2;
}
for (int i=po; i<2*po; i++) {
bal[i]=i-po+1, jobb[i]=i-po+1;
if (bal[i]<=n) {
sum[i]=h[sor2[bal[i]]];
mini[i]=sum[i];
}
}
for (int i=po-1; i>=1; i--) {
bal[i]=bal[2*i], jobb[i]=jobb[2*i+1];
mini[i]=min(mini[2*i], mini[2*i+1]);
}
long long ans=ask(m);
long long specsum=0, specdb=0;
for (int i=1; i<=n; i++) {
int id=sor1[i];
add(i, t[id], -1);
int hely=inv2[id];
range_add(1, hely, n, -t[id]);
specsum+=t[id], specdb++;
if (mini[1]>=0) {
ans=max(ans, 2*specdb+ask(m-specsum));
} else {
range_add(1, hely, n, t[id]);
specsum-=t[id], specdb--;
add(i, t[id], 1);
}
}
for (int i=0; i<2*po; i++) {
bal[i]=0, jobb[i]=0, sum[i]=0, mini[i]=0;
}
for (int i=0; i<=n; i++) {
fen[i]=0, db[i]=0;
sor1[i]=0, sor2[i]=0, inv2[i]=0;
}
return ans;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int tc;
cin >> tc;
for (int w=1; w<=tc; w++) {
cin >> n >> m;
for (int i=1; i<=n; i++) {
cin >> t[i] >> h[i];
}
cout << solve_nlogn() << "\n";
}
}
| Subtask | Sum | Test | Verdict | Time | Memory | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Accepted | 1ms | 316 KiB | ||||
| subtask2 | 7/7 | ||||||
| 2 | Accepted | 1ms | 316 KiB | ||||
| 3 | Accepted | 29ms | 524 KiB | ||||
| 4 | Accepted | 76ms | 532 KiB | ||||
| 5 | Accepted | 153ms | 12456 KiB | ||||
| 6 | Accepted | 218ms | 24104 KiB | ||||
| 7 | Accepted | 115ms | 1012 KiB | ||||
| subtask3 | 12/12 | ||||||
| 8 | Accepted | 1ms | 508 KiB | ||||
| 9 | Accepted | 29ms | 316 KiB | ||||
| 10 | Accepted | 149ms | 1844 KiB | ||||
| 11 | Accepted | 178ms | 14388 KiB | ||||
| 12 | Accepted | 254ms | 26376 KiB | ||||
| 13 | Accepted | 100ms | 552 KiB | ||||
| subtask4 | 16/16 | ||||||
| 14 | Accepted | 1ms | 316 KiB | ||||
| 15 | Accepted | 1ms | 508 KiB | ||||
| 16 | Accepted | 1ms | 316 KiB | ||||
| 17 | Accepted | 1ms | 316 KiB | ||||
| 18 | Accepted | 1ms | 316 KiB | ||||
| 19 | Accepted | 1ms | 316 KiB | ||||
| 20 | Accepted | 1ms | 316 KiB | ||||
| 21 | Accepted | 1ms | 316 KiB | ||||
| 22 | Accepted | 1ms | 316 KiB | ||||
| 23 | Accepted | 1ms | 316 KiB | ||||
| 24 | Accepted | 1ms | 316 KiB | ||||
| subtask5 | 22/22 | ||||||
| 25 | Accepted | 1ms | 316 KiB | ||||
| 26 | Accepted | 1ms | 508 KiB | ||||
| 27 | Accepted | 1ms | 316 KiB | ||||
| 28 | Accepted | 1ms | 316 KiB | ||||
| 29 | Accepted | 1ms | 316 KiB | ||||
| 30 | Accepted | 1ms | 316 KiB | ||||
| 31 | Accepted | 1ms | 316 KiB | ||||
| 32 | Accepted | 1ms | 316 KiB | ||||
| 33 | Accepted | 1ms | 316 KiB | ||||
| 34 | Accepted | 1ms | 316 KiB | ||||
| 35 | Accepted | 1ms | 316 KiB | ||||
| 36 | Accepted | 3ms | 316 KiB | ||||
| 37 | Accepted | 4ms | 564 KiB | ||||
| 38 | Accepted | 4ms | 820 KiB | ||||
| 39 | Accepted | 4ms | 624 KiB | ||||
| 40 | Accepted | 6ms | 1076 KiB | ||||
| 41 | Accepted | 4ms | 564 KiB | ||||
| subtask6 | 43/43 | ||||||
| 42 | Accepted | 1ms | 316 KiB | ||||
| 43 | Accepted | 1ms | 316 KiB | ||||
| 44 | Accepted | 29ms | 524 KiB | ||||
| 45 | Accepted | 76ms | 532 KiB | ||||
| 46 | Accepted | 153ms | 12456 KiB | ||||
| 47 | Accepted | 218ms | 24104 KiB | ||||
| 48 | Accepted | 115ms | 1012 KiB | ||||
| 49 | Accepted | 1ms | 508 KiB | ||||
| 50 | Accepted | 29ms | 316 KiB | ||||
| 51 | Accepted | 149ms | 1844 KiB | ||||
| 52 | Accepted | 178ms | 14388 KiB | ||||
| 53 | Accepted | 254ms | 26376 KiB | ||||
| 54 | Accepted | 100ms | 552 KiB | ||||
| 55 | Accepted | 1ms | 508 KiB | ||||
| 56 | Accepted | 1ms | 316 KiB | ||||
| 57 | Accepted | 1ms | 316 KiB | ||||
| 58 | Accepted | 1ms | 316 KiB | ||||
| 59 | Accepted | 1ms | 316 KiB | ||||
| 60 | Accepted | 1ms | 316 KiB | ||||
| 61 | Accepted | 1ms | 316 KiB | ||||
| 62 | Accepted | 1ms | 316 KiB | ||||
| 63 | Accepted | 1ms | 316 KiB | ||||
| 64 | Accepted | 1ms | 316 KiB | ||||
| 65 | Accepted | 3ms | 316 KiB | ||||
| 66 | Accepted | 4ms | 564 KiB | ||||
| 67 | Accepted | 4ms | 820 KiB | ||||
| 68 | Accepted | 4ms | 624 KiB | ||||
| 69 | Accepted | 6ms | 1076 KiB | ||||
| 70 | Accepted | 4ms | 564 KiB | ||||
| 71 | Accepted | 142ms | 1880 KiB | ||||
| 72 | Accepted | 173ms | 3364 KiB | ||||
| 73 | Accepted | 245ms | 13088 KiB | ||||
| 74 | Accepted | 212ms | 15520 KiB | ||||
| 75 | Accepted | 187ms | 15296 KiB | ||||
| 76 | Accepted | 284ms | 24884 KiB | ||||
| 77 | Accepted | 291ms | 24612 KiB | ||||