比赛 收心赛 评测结果 WWWWWWTTTT
题目名称 冰火战士 最终得分 0
用户昵称 rzzakioi 运行时间 14.940 s
代码语言 C++ 内存使用 52.12 MiB
提交时间 2026-02-24 12:28:50
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
int tr[8000005][2],n,a[2000005],cnt;
struct node{
    int op,t,x,y;
}q[2000005];
map<int,int>mp;
void change(int k,int l,int r,int x,int v,int op){
    if(l==r){
        tr[k][op]+=v;
        return;
    }
    int mid=(l+r)>>1;
    if(x<=mid)change(k*2,l,mid,x,v,op);
    else change(k*2+1,mid+1,r,x,v,op);
    tr[k][op]=tr[k*2][op]+tr[k*2+1][op];
}
int query(int k,int l,int r,int x,int y,int op){
    if(x<=l&&r<=y)return tr[k][op];
    if(r<x||y<l)return 0;
    int mid=(l+r)>>1;
    return query(k*2,l,mid,x,y,op)+query(k*2+1,mid+1,r,x,y,op);
}
int main(){
    freopen("icefire.in","r",stdin);
    freopen("icefire.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&q[i].op);
        if(q[i].op==1){
            scanf("%d%d%d",&q[i].t,&q[i].x,&q[i].y);
            a[++cnt]=q[i].x;
        }
        else scanf("%d",&q[i].t); 
    }
    sort(a+1,a+cnt+1);
    cnt=unique(a+1,a+cnt+1)-a-1;
    for(int i=1;i<=cnt;i++){
        mp[a[i]]=i;
    }
    for(int i=1;i<=n;i++){
        if(q[i].op==1){
            change(1,1,cnt,mp[q[i].x],q[i].y,q[i].t);
        }
        else{
            int x=q[i].t;
            change(1,1,cnt,mp[q[x].x],-q[x].y,q[x].t);
        }
        int l=1,r=cnt,ans1=0,ans2=0;
        while(l<=r){
            int mid=(l+r)>>1;
            if(query(1,1,cnt,1,mid,0)<=query(1,1,cnt,mid,cnt,1)){
                ans1=mid;
                l=mid+1;
            }
            else{
                ans2=mid;
                r=mid-1;
            }
        }
        int ans=0,ansnow=0;
        if(ans1!=0&&2*query(1,1,cnt,1,ans1,0)>ans){
            ans=2*query(1,1,cnt,1,ans1,0);
            ansnow=ans1;
        }
        if(ans2!=0&&2*query(1,1,cnt,ans2,cnt,1)>ans){
            ans=2*query(1,1,cnt,ans2,cnt,1);
            ansnow=ans2;
        }
        if(ansnow==0)printf("Peace\n");
        else printf("%d %d\n",a[ansnow+1]-1,ans);
    }
    return 0;
}