您的位置:首页 > 其它

【bzoj1828/Usaco2010 Mar】balloc 农场分配——贪心+差分+优先队列

2017-10-13 19:49 423 查看

Description

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
const int N=1e5+10;
int n,m,a
,p
;
struct node{int l,r;}e
;
bool cmp(node aa,node bb){return aa.l<bb.l;}
int read(){
int ans=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){ans=ans*10+c-48;c=getchar();}
return ans*f;
}
std::priority_queue<int>q;
int main(){
n=read();m=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=m;i++){
int l=read(),r=read();e[i]=(node){l,r};
p[l]++;p[r+1]--;
}
std::sort(e+1,e+1+m,cmp);
int now=0,h=1;int ans=m;
for(int i=1;i<=n;i++){
now+=p[i];
while(h<=m&&e[h].l==i)q.push(e[h].r),h++;
while(now>a[i]&&!q.empty()){
int pp=q.top();q.pop();
p[pp+1]++;now--;ans--;
}
}
printf("%d\n",ans);
return 0;
}
bzoj1828

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: