20pts求调
查看原帖
20pts求调
749831
Luogu_are_DASB楼主2023/10/29 18:21
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
const long long N = 2.5 * 1e5 + 5; 
long long n ,b1 = 0;
struct Node {
	long long a ,b;
	long long id;
}a[N];
priority_queue<Node> q;
bool operator <(Node a ,Node b) {
	if(a.b == b.b) return a.id < b.id;
	return a.b > b.b;
}

long long inv = 0;
long long ans = 0;
long long num[N];
bool vis[N];
int main() {
	cin >> n;
	for(long long i = 1; i <= n; i ++) {
		cin >> a[i].a;
		a[i].id = i;
	}
	for(long long i = 1; i <= n; i ++) {
		cin >> a[i].b;
	}
	for(long long i = 1; i <= n; i ++) {
		inv += a[i].a;
		if(inv >= a[i].b) {
			inv -= a[i].b;
			q.push((Node)a[i]);
			ans ++;
			vis[i] = 1;
		}
		else {
			if(q.empty()) continue;
			if(q.top().b > a[i].b) {
				inv += q.top().b;
				inv -= a[i].b;
				vis[q.top().id] = 0;
				vis[a[i].id] = 1;
				q.pop();
				q.push((Node)a[i]);
			}
		}
	}
	cout << ans << '\n';
	for(int i = 1; i <= n; i ++) if(vis[i]) cout << i << ' ';
	return 0;
} 
2023/10/29 18:21
加载中...