比赛 收心赛 评测结果 WWWWWWTTTT
题目名称 冰火战士 最终得分 0
用户昵称 郑霁桓 运行时间 13.360 s
代码语言 C++ 内存使用 41.25 MiB
提交时间 2026-02-24 11:25:47
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,op[2000005],t[2000005],x[2000005],y[2000005];
int b[2000005],bb,l1[8000005],l2[8000005];
int m1[8000005],m2[8000005],ps[8000005];
pair<int,int>pp;
inline void pd(int p){
    m1[p*2]+=l1[p];
    m1[p*2+1]+=l1[p];
    m2[p*2]+=l2[p];
    m2[p*2+1]+=l2[p];
    l1[p*2]+=l1[p];
    l1[p*2+1]+=l1[p];
    l2[p*2]+=l2[p];
    l2[p*2+1]+=l2[p];
    l1[p]=l2[p]=0;
    return;
} 
inline void ad(int x,int y,int l,int r,int p,int v,int pp){
    if(x<=l&&r<=y){
        if(pp){
            l1[p]+=v;
            m1[p]+=v;
        }else{
            l2[p]+=v;
            m2[p]+=v;
        }
        if(!ps[p]) ps[p]=r;
        return;
    }
    int md=(l+r)>>1;
    if(l1[p]||l2[p]) pd(p);
    if(x<=md) ad(x,y,l,md,p*2,v,pp);
    if(md+1<=y) ad(x,y,md+1,r,p*2+1,v,pp);
    if(!ps[p*2]) ps[p*2]=md;
    if(!ps[p*2+1]) ps[p*2+1]=r;
    if(min(m1[p*2],m2[p*2])>min(m1[p*2+1],m2[p*2+1])){
        m1[p]=m1[p*2];
        m2[p]=m2[p*2];
        ps[p]=ps[p*2];
    }else if(min(m1[p*2],m2[p*2])==min(m1[p*2+1],m2[p*2+1])){
        if(max(m1[p*2],m2[p*2])>max(m1[p*2+1],m2[p*2+1])){
            m1[p]=m1[p*2];
            m2[p]=m2[p*2];
            ps[p]=ps[p*2];
        }else{
            m1[p]=m1[p*2+1];
            m2[p]=m2[p*2+1];
            ps[p]=ps[p*2+1];
        }
    }else{
        m1[p]=m1[p*2+1];
        m2[p]=m2[p*2+1];
        ps[p]=ps[p*2+1];
    }
    return;
}
inline pair<int,int> fd(int l,int r,int p){
    if(l==r){
        return {l,min(m1[p],m2[p])*2};
    }
    if(!ps[p]) ps[p]=r;
    int md=(l+r)>>1,s=min(m1[p],m2[p])*2;
    pd(p);
    pair<int,int>ppp;
    if(min(m1[p*2],m2[p*2])>min(m1[p*2+1],m2[p*2+1])) ppp=fd(l,md,p*2);
    else ppp=fd(md+1,r,p*2+1);
    if(ppp.second<=s){
        ppp.first=max(ppp.first,ps[p]);
        ppp.second=s;
    }
    return ppp;
}
int main(){
    freopen("icefire.in","r",stdin);
    freopen("icefire.out","w",stdout);
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>op[i]>>t[i];
        if(op[i]==1){
            cin>>x[i]>>y[i];
            b[++bb]=x[i];
        }
    }
    sort(b+1,b+bb+1);
    bb=unique(b+1,b+bb+1)-b-1;
    for(int i=1;i<=n;i++){
        if(op[i]==1){
            x[i]=lower_bound(b+1,b+bb+1,x[i])-b;
            if(t[i]) ad(1,x[i],1,bb,1,y[i],1);
            else ad(x[i],bb,1,bb,1,y[i],0);
        }else{
            if(t[t[i]]) ad(1,x[t[i]],1,bb,1,-y[t[i]],1);
            else ad(x[t[i]],bb,1,bb,1,-y[t[i]],0);
        }
        pp=fd(1,bb,1);
        if(!pp.second) cout<<"Peace\n"; 
        else cout<<b[pp.first]<<" "<<pp.second<<"\n";
    }
    return 0;
}