【BZOJ】【P2802】【POI2012】【Warehouse Store】【题解】【贪心】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2802

今天晚上事真是多啊……

本来打算再写写AC自动机的

然后被叫去看3786

然后讨论点分治

然后被鬼畜数学题虐翻

然后想了很久3100

然后什么也没做

于是拿出珍藏已久的poi水题凑一下数……

Code:

#include<bits/stdc++.h>
using namespace std;
const int maxn=250010;
typedef pair<int,int> pi;
typedef long long LL;
set<pi>S;
int a[maxn],b[maxn],n,anss[maxn];
LL now;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)scanf("%d",&b[i]);
	for(int i=1;i<=n;i++){
		now+=a[i];
		if(now>=b[i]){
			now-=b[i];
			S.insert(pi(b[i],i));
			continue;
		}else{
			if(S.empty())continue;
			pi x=*(--S.end());
			if(x.first>b[i]){
				S.erase(--S.end());
				now=now+x.first-b[i];
				S.insert(pi(b[i],i));				
			}
		}
	}printf("%d\n",S.size());
	for(set<pi>::iterator i=S.begin();i!=S.end();i++)anss[++anss[0]]=i->second;
	sort(anss+1,anss+1+anss[0]);
	for(int i=1;i<=anss[0];i++)printf("%d ",anss[i]);
	return 0;
}


你可能感兴趣的:(bzoj)