如题
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#define MAXN 250000
#define int long long
#define QWQ cout << "QWQ" << endl;
using namespace std;
struct node {
long long val;
int id;
node(long long V, int I) {
val = V, id = I;
}
bool operator < (const node &other) const {
return val < other.val;
}
};
vector <int> vec;
long long a[MAXN + 10], b[MAXN + 10];
bool vis[MAXN + 10];
signed main() {
priority_queue <node> que;
int n; cin >> n;
for(int p = 1; p <= n; p++)
cin >> a[p];
long long ans = 0, tot = 0;
for(int p = 1; p <= n; p++) {
cin >> b[p];
tot += a[p];
if(tot >= b[p]) {
tot -= b[p];
que.push(node(b[p], p));
ans++;
}
else if(!que.empty() && que.top().val > b[p]) {
tot = tot + que.top().val - b[p];
que.pop(); que.push(node(b[p], p));
}
}
while(!que.empty()) {
vec.push_back(que.top().id);
que.pop();
}
sort(vec.begin(), vec.end());
cout << ans << endl;
for(int p = 0; p < ans; p++)
cout << vec[p] << ' ';
}
这是我的 AC 代码,把 36 行改成 else if(!que.empty() && tot + que.top().val >= b[p]) { 就 60pts
不应该是当前省下来的数目加上大根堆堆顶的数目大于 b 就可以用了咩?/kk
求助/kel