Pagini recente » Cod sursa (job #718528) | Cod sursa (job #1987524) | Istoria paginii utilizator/stoicarobert | Cod sursa (job #526560) | Cod sursa (job #2102428)
#include <bits/stdc++.h>
const int MAX_N = 200000;
struct PROB {
int n, t, id;
}v[MAX_N], v2[MAX_N];
bool cmp1(PROB a, PROB b) {
return a.n < b.n;
}
bool cmp2(PROB a, PROB b) {
return a.t < b.t;
}
bool check(int n, int x, int t) {
int i = n - 1, top;
top = 0;
while(i >= 0 && v[i].n >= x) {
v2[top++] = v[i];
--i;
}
std::sort(v2, v2 + top, cmp2);
if(top < x)
return 0;
for(int i = 0; i < x; ++i)
t -= v2[i].t;
return t >= 0;
}
int main() {
int n, t;
int st, dr;
scanf("%d%d", &n, &t);
for(int i= 0 ; i < n; ++i) {
scanf("%d%d", &v[i].n, &v[i].t);
v[i].id = i + 1;
}
std::sort(v, v + n, cmp1);
st = 0;
dr = n + 1;
while(dr - st > 1) {
int mid = (st + dr) / 2;
if(check(n, mid, t))
st = mid;
else
dr = mid;
}
check(n, st, t);
printf("%d\n%d\n", st, st);
for(int i = 0; i < st; ++i)
printf("%d ", v2[i].id);
return 0;
}