比赛 20251001国庆欢乐赛1 评测结果 AWWWWWWWWW
题目名称 有n种物品 最终得分 10
用户昵称 Ruyi 运行时间 0.402 s
代码语言 C++ 内存使用 4.80 MiB
提交时间 2025-10-01 09:25:47
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,a[100001],b[100001],v[100001],flag[1000001],ff[100001];
ll ansa,ansb;
struct tree{
    int i,max;
}t[1000001];
void build(int l,int r,int k){
    if(l==r){
        t[k].i=l;
        t[k].max=a[l];
        v[l]=k;
        return ;
    }
    int mid=(l+r)/2;
    build(l,mid,k*2);
    build(mid+1,r,k*2+1);
    if(t[k*2].max>t[k*2+1].max){
        t[k].max=t[k*2].max;
        t[k].i=t[k*2].i;
    }else if(t[k*2].max==t[k*2+1].max){
        if(ff[t[k*2].i]>ff[t[k*2+1].i]){
            t[k].max=t[k*2+1].max;
            t[k].i=t[k*2+1].i;
        }else{
            t[k].max=t[k*2].max;
            t[k].i=t[k*2].i;
        }
    }else{
        t[k].max=t[k*2+1].max;
        t[k].i=t[k*2+1].i;
    }
    return ;
}
void f(){
    int k=v[t[1].i];
    if(flag[k]==0){
        t[k].max=b[t[1].i];
        ff[t[1].i]-=a[t[1].i];
    }else if(flag[k]==1){
        t[k].max=0;
        ff[t[1].i]=0;
    }
    flag[k]++;
    while(k/2>0){
        int kk;
        if(k%2==0) kk=k+1;
        else kk=k-1;
        if(t[k].max>t[kk].max){
            t[k/2].max=t[k].max;
            t[k/2].i=t[k].i;
        }else if(t[k].max==t[kk].max){
            if(ff[t[k].i]>ff[t[kk].i]){
                t[k/2].max=t[kk].max;
                t[k/2].i=t[kk].i;
            }else{
                t[k/2].max=t[k].max;
                t[k/2].i=t[k].i;
            }
        }else{
            t[k/2].max=t[kk].max;
            t[k/2].i=t[kk].i;
        }
        k/=2;
    }
    return ;
}
int main(){
    freopen("nit.in","r",stdin);
    freopen("nit.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i];
        ff[i]=a[i]+b[i];
    }
    build(1,n,1);
    for(int i=1;i<=n;i++){
        ansa+=t[1].max;
        //cout<<t[1].max<<endl;
        f();
        ansb+=t[1].max;
        //cout<<t[1].max<<endl;
        f();
    }
    cout<<ansa-ansb<<endl;
    return 0;
}