比赛 收心赛 评测结果 AAAAAATTTE
题目名称 冰火战士 最终得分 60
用户昵称 exil 运行时间 17.820 s
代码语言 C++ 内存使用 137.48 MiB
提交时间 2026-02-24 11:49:47
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
	int l;
	int r;
	int sum;
	int tag;
};
node tp1[8000005],tp2[8000005];
void jianshu(int k,int l,int r){
	tp1[k]=(node){l,r,0,0};
	tp2[k]=(node){l,r,0,0};
	if(l==r){
		return;
	}
	int mid=(l+r)/2;
	jianshu(k<<1,l,mid);
	jianshu(k<<1|1,mid+1,r);
}
void pushdown1(int x){
	if(tp1[x].tag==0)return;
	tp1[x<<1].sum+=(tp1[x<<1].r-tp1[x<<1].l+1)*tp1[x].tag;
	tp1[x<<1].tag+=tp1[x].tag;
	tp1[x<<1|1].sum+=(tp1[x<<1|1].r-tp1[x<<1|1].l+1)*tp1[x].tag;
	tp1[x<<1|1].tag+=tp1[x].tag;
	tp1[x].tag=0;
}
void pushdown2(int x){
	if(tp2[x].tag==0)return;
	tp2[x<<1].sum+=(tp2[x<<1].r-tp2[x<<1].l+1)*tp2[x].tag;
	tp2[x<<1].tag+=tp2[x].tag;
	tp2[x<<1|1].sum+=(tp2[x<<1|1].r-tp2[x<<1|1].l+1)*tp2[x].tag;
	tp2[x<<1|1].tag+=tp2[x].tag;
	tp2[x].tag=0;
}
void add1(int k,int l,int r,int a){
	if(tp1[k].l>r || tp1[k].r<l)return;
	if(tp1[k].l>=l && tp1[k].r<=r){
		tp1[k].sum+=(tp1[k].r-tp1[k].l+1)*a;
		tp1[k].tag+=a;
		pushdown1(k);
		return;
	}
	pushdown1(k);
	add1(k<<1,l,r,a);
	add1(k<<1|1,l,r,a);
	pushdown1(k);
	tp1[k].sum=tp1[k<<1].sum+tp1[k<<1|1].sum;
	
}

void add2(int k,int l,int r,int a){
	if(tp2[k].l>r || tp2[k].r<l)return;
	if(tp2[k].l>=l && tp2[k].r<=r){
		tp2[k].sum+=(tp2[k].r-tp2[k].l+1)*a;
		tp2[k].tag+=a;
		pushdown2(k);
		return;
	}
	pushdown2(k);
	add2(k<<1,l,r,a);
	add2(k<<1|1,l,r,a);
	pushdown2(k);
	tp2[k].sum=tp2[k<<1].sum+tp2[k<<1|1].sum;
	
}
int cha1(int k,int l,int r){
	pushdown1(k);
	if(tp1[k].l>r || tp1[k].r<l)return 0;
	
	if(tp1[k].l>=l && tp1[k].r<=r){
		return tp1[k].sum;
	}
	return cha1(k<<1,l,r)+cha1(k<<1|1,l,r);
}

int cha2(int k,int l,int r){
	pushdown2(k);
	if(tp2[k].l>r || tp2[k].r<l)return 0;
	
	if(tp2[k].l>=l && tp2[k].r<=r){
		return tp2[k].sum;
	}
	return cha2(k<<1,l,r)+cha2(k<<1|1,l,r);
}
int shu[2000005][4];
signed main(){
    freopen("icefire.in","r",stdin);
    freopen("icefire.out","w",stdout); 
    int Q;
    cin>>Q;
    vector<int> v;
    for(int i = 1;i<=Q;++i){
        int a;
        cin>>a;
        if(a==1){
            int t,x,y;
            cin>>t>>x>>y;
            shu[i][0]=1;
            shu[i][1]=t;
            shu[i][2]=x;
            shu[i][3]=y;
            v.push_back(x);
            
        }
        else{
            shu[i][0]=2;
            int x;
            cin>>x;
            shu[i][1]=x;
        }
        
        
    }
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
    int mo=v.size();
    jianshu(1,1,mo);
    for(int i = 1;i<=Q;++i){
        if(shu[i][0]==1){
            int wei=lower_bound(v.begin(),v.end(),shu[i][2])-v.begin()+1;
            
            if(shu[i][1]==1){
                add1(1,1,wei,shu[i][3]);
            }
            else{
                add2(1,wei,mo,shu[i][3]);
            }
            
            
        }
        else{
            int xu=shu[i][1];
            int wei=lower_bound(v.begin(),v.end(),shu[xu][2])-v.begin()+1;
            if(shu[xu][1]==1){
                add1(1,1,wei,-shu[xu][3]);
            }
            else{
                add2(1,wei,mo,-shu[xu][3]);
            }
            
            
            
        }
//        int w=lower_bound(v.begin(),v.end(),589)-v.begin()+1;
//        cout<<min(cha1(1,w,w),cha2(1,w,w))<<endl;
        
        int l=1,r=mo;
        int wen=mo;
        while(l<=r){
            int mid=(l+r)/2;
            int aa=cha1(1,mid,mid);
            int bb=cha2(1,mid,mid);
            if(aa>=bb){
                l=mid+1;
            }
            else {
                wen=mid;
                r=mid-1;
            }
        }
        
        int maxx=0,a=min(cha1(1,wen-1,wen-1),cha2(1,wen-1,wen-1)),b=min(cha1(1,wen,wen),cha2(1,wen,wen));
        if(a>b){
            maxx=a;
            wen--;
        }
        else{
            maxx=b;
            int li=wen,ri=mo;
            int pan=0;
            while(li<=ri){
                int mid=(li+ri)/2;
                if(cha1(1,mid,mid)>=b){
                    li=mid+1;
                }
                else{
                    pan=1;
                    wen=mid;
                    ri=mid-1;
                }
            }
            if(pan==0)wen=mo;
            else wen--;
        }
 
        if(maxx==0){
            cout<<"Peace\n";
        }
        else cout<<v[wen-1]<<" "<<2*maxx<<"\n";
        
        
    }
    return 0;
}