51nod加农炮

时间:2023-03-10 06:10:14
51nod加农炮

这道题维护一下前缀最大值然后二分答案就好了哇 233

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=,inf=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,mx,k,l,r;
int a[M],sum[M];
int main()
{
n=read(); m=read();
for(int i=;i<=n;i++) a[i]=read(),mx=max(mx,a[i]),sum[i]=max(sum[i-],a[i]);
//for(int i=1;i<=n;i++) printf("%d ",sum[i]);
for(int i=;i<=m;i++){
k=read(); if(k>mx||k<=a[]) continue;
l=,r=m;
while(l<=r){
int mid=(l+r)>>;
if(sum[mid]<k) l=mid+;
else r=mid-;
}
//printf("[%d]\n",l);
a[l-]++; sum[l-]=max(a[l-],sum[l-]);
}
for(int i=;i<=n;i++) printf("%d\n",a[i]);
return ;
}