P3537 [POI2012]SZA-Cloakroom
*P3537 [POI2012]SZA-Cloakroom
POI 合集。
好题,一开始一直在想
由于背包不可删除,所以按顺序将物品加入背包方便回答,故将询问离线处理。
设
不妨设要加入
对于一次询问
综上,时间复杂度
const int N = 1e5 + 5;
int n, q, f[N], ans[N << 4];
pair <pii, int> item[N];
pair <pii, pii> query[N << 4];
int main(){
cin >> n, f[0] = 1e9;
for(int i = 1; i <= n; i++) cin >> item[i].se >> item[i].fi.fi >> item[i].fi.se;
cin >> q, sort(item + 1, item + n + 1);
for(int i = 1; i <= q; i++)
query[i].fi.fi = read(), query[i].se.fi = read(),
query[i].fi.se = read() + query[i].fi.fi, query[i].se.se = i;
sort(query + 1, query + q + 1);
for(int i = 1, p = 1; i <= n + 1; i++) {
while(p <= q && (query[p].fi.fi < item[i].fi.fi || i == n + 1))
ans[query[p].se.se] = f[query[p].se.fi] > query[p].fi.se, p++;
for(int k = N - 1; k >= item[i].se; k--)
cmax(f[k], min(f[k - item[i].se], item[i].fi.se));
} for(int i = 1; i <= q; i++) puts(ans[i] ? "TAK" : "NIE");
return flush(), 0;
}