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