//显而易见题干让你维护动态中位数,然后就能想到经典做法对顶堆
//维护对顶堆及两个堆的元素和从而实现求解
#include<bits/stdc++.h>
#define PII pair<int,int>
#define PLL pair<long long,long long>
#define fi first
#define se second
#define endl '\n'
#define bug printf("bug\n");
using namespace std;
const int N=2e5+10;
const int INF=0x3f3f3f3f;
const long long LNF=0x3f3f3f3f3f3f3f3f;
const long long mod=1e9+7;
long long fastpower(long long down,long long power,long long mod){
long long res=1;
while(power){
if(power&1) res=res*down%mod;
down=down*down%mod;
power=power>>1;
}
return res;
}
void solve(){
priority_queue<long long> down;
priority_queue<long long, vector<long long>, greater<long long>> up;
int n; scanf("%d",&n);
long long cnt=0;
long long sum_down=0,sum_up=0;
for(int i=1;i<=n;i++){
long long op; scanf("%lld",&op);
if(op==1){
long long a,b; scanf("%lld %lld",&a,&b);
cnt=cnt+b;
if(down.empty()||a<=down.top()){
down.push(a); sum_down+=a;
}
else{
up.push(a); sum_up+=a;
}
if (down.size()>up.size()+1){
sum_down-=down.top();
sum_up+=down.top();
up.push(down.top());
down.pop();
}
if (up.size()>down.size()){
sum_down+=up.top();
sum_up-=up.top();
down.push(up.top());
up.pop();
}
}
else{
long long res=0;
//printf("%d %d\n",down.size(),up.size());
if(down.size()&&up.size()){//>=2
res=down.top()*(long long)(down.size()-up.size())-sum_down+sum_up+cnt;
}
else if(down.size()){//=1
res=cnt;
}
printf("%lld %lld\n",down.top(),res);
}
}
}
int main(){
int t=1;
//scanf("%d",&t);
while(t--){
solve();
}
return 0 - 0;
}
L - Absolute Minima(2022.7.7训练赛)
最新推荐文章于 2024-05-20 22:11:41 发布