| 比赛 |
收心赛 |
评测结果 |
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;
}