RT,我看别人写的两只log都能卡过去,我这单log居然吸了氧还T一个点……
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<unordered_map>
#define ll long long
#define ull unsigned long long
#define dbg cout<<"ok"<<endl;
#define mod
#define N 4000003
using namespace std;
int q,n,temp[N],tot,lg,table[N];
int t[N][2],val[N],ans,best,all;
struct query {
int opt,t,x,y,k;
} a[N];
unordered_map<int,int> ma;
inline void add(int x,int k,int val){
for(; x<=n; x+=x&(-x)) t[x][k] += val;
}
void work()
{
int p = 0 , m = lg;
int sum0=0,sum1=0,target;
for(int i=m; i>=0; --i)
{
int k = p|(1<<i);
if(sum0 + t[k][0] <= all - (sum1 + t[k][1] - val[k]) && k<=n)
{
sum0 += t[k][0];
sum1 += t[k][1];
p = k;
}
}
best = table[p]; ans = sum0;
if(all - sum1 < ans) return;
p=0; target=sum1; sum1=0;
for(int i=m; i>=0; --i)
{
int k = p|(1<<i);
if(sum1 + t[k][1] <= target && k<=n)
{
sum1 += t[k][1];
p = k;
}
}
best = table[p+1], ans = all - sum1;
}
inline int qread(){
int num = 0 ; char ch = getchar();
while(ch < '0' || ch > '9') ch = getchar();
while(ch >= '0' && ch <= '9') {
num = num*10 + ch-'0';
ch = getchar();
}
return num;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
q=qread();
for(int i=1; i<=q; ++i)
{
a[i].opt=qread();
if(a[i].opt == 1)
{
a[i].t=qread(); a[i].x=qread(); a[i].y=qread();
temp[++tot] = a[i].x;
}
else
a[i].k=qread();
}
sort(temp+1,temp+1+tot);
for(int i=1; i<=tot; ++i)
if(ma.find(temp[i]) == ma.end() ){
ma[temp[i]] = ++n;
table[n] = temp[i];
}
lg = log2(n);
for(int i=1; i<=q; ++i)
{
a[i].x = ma[a[i].x];
if(a[i].opt == 1)
{
add(a[i].x,a[i].t,a[i].y);
if(a[i].t)
{
all += a[i].y;
val[a[i].x] += a[i].y;
}
}
else
{
int p = a[i].k;
add(a[p].x,a[p].t,-a[p].y);
if(a[p].t)
{
all -= a[p].y;
val[a[p].x]-= a[p].y;
}
}
ans = 0;
work();
if(ans == 0) cout<<"Peace"<<endl;
else cout<<best<<" "<<(ans<<1)<<endl;
}
return 0;
}