P3545 [POI2012]HUR-Warehouse Store
https://www.luogu.com.cn/problem/P3545
模拟费用流入门题
能满足就满足
不能满足考虑反悔,替换掉前面一个\(b_j\)最大的,如果\(b_j<b_i\)那就没有必要替换
code:
#include<bits/stdc++.h>
#define N 250050
#define ll long long
#define pii pair<int, int>
#define fi first
#define se second
using namespace std;
struct Q {
int t, s;
} a[N];
int n;
priority_queue<pii > q;
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i ++) scanf("%d", &a[i].t);
for(int i = 1; i <= n; i ++) scanf("%d", &a[i].s);
int ans = 0;
ll T = 0;
for(int i = 1; i <= n; i ++) {
T += a[i].t;
if(T >= a[i].s) {
T -= a[i].s;
q.push(make_pair(a[i].s, i));
ans ++;
} else {
if(q.size() && a[i].s < q.top().fi) {
T += q.top().fi; q.pop();
T -= a[i].s;
q.push(make_pair(a[i].s, i));
}
}
}
printf("%d\n", ans);
while(q.size()) printf("%d ", q.top().se), q.pop();
return 0;
}