提交时间:2024-10-02 14:11:27

运行 ID: 32895

#include<bits/stdc++.h> using namespace std; #define int long long #define ls pos<<1 #define rs pos<<1|1 const int N=4e5+10; struct pvz{int x,d;}a[N]; int n,h,k,hth,cnt,b[N]; struct tree{int num,pl;}t[N<<1]; void pushup(int pos){ if(t[ls].num>t[rs].num){t[pos]=t[ls];} else {t[pos]=t[rs];} } void build(int pos,int l,int r){ if(l==r){t[pos]=(tree){b[l],l};return;} int mid=(l+r)>>1; build(ls,l,mid); build(rs,mid+1,r); pushup(pos); } void update(int pos,int l,int r,int x,int k){ if(l==r){t[pos].num=k;return;} int mid=(l+r)>>1; if(x<=mid)update(ls,l,mid,x,k); else update(rs,mid+1,r,x,k); pushup(pos); } signed main(){ //freopen("pvz.in","r",stdin); //freopen("pvz.out","w",stdout); scanf("%lld%lld%lld",&n,&h,&k); if(n+k<h){ while(k--)printf("Zombie ate your brain\n"); return 0; } for(int i=1;i<=n;i++)scanf("%lld",&a[i].x); for(int i=1;i<=n;i++){ scanf("%lld",&a[i].d); if(a[i].d==-1)b[++cnt]=a[i].x; } sort(b+1,b+cnt+1); build(1,1,h); while(k--){ int X,D;scanf("%lld%lld",&X,&D); //tian jia if(D==-1){ if(cnt+1<=h){update(1,1,h,++cnt,X);} else{ if(X<t[1].num){update(1,1,h,t[1].pl,X);} } } //da an if(cnt<h)printf("Zombie ate your brain\n"); else { double ans=(double)(t[1].num)/2; printf("%.1f\n",ans); } } //fclose(stdin); //fclose(stdout); return 0; }