比赛 EYOI常规赛 1st 评测结果 AAAAAAATTTAAAAAAAAAAAAAAA
题目名称 EYOI的成立 最终得分 88
用户昵称 op_组撒头屯 运行时间 4.850 s
代码语言 C++ 内存使用 7.26 MiB
提交时间 2021-12-15 20:08:42
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=100000+5;
const int M=200000;
int n,mx;
int a[N]={0},b[N]={0};
int p[M+5]={0};
int lowbit(int x){
    return x&(-x);
}
void add(int x,int y){
    for (int i=x;i<=mx;i+=lowbit(i)){
        p[i]+=y;
    }
    return ;
}
int getsum(int x){
    int t=0;
    for (int i=x;i>0;i-=lowbit(i)){
        t+=p[i];
    }
    return t;
}
int main(){
    freopen ("EYOI_found.in","r",stdin);
    freopen ("EYOI_found.out","w",stdout);
    scanf("%d",&n);
    for (int i=1;i<=n;i++){
        scanf("%d%d",&a[i],&b[i]);
        mx=max(mx,a[i]+b[i]);
    }
    for (int i=1;i<=n;i++){
        int t=getsum(a[i]+b[i]-1);
        if (t==0){
            printf("0 ");
        }
        else{
            int l=1,r=mx;
            while(l<r){
                int mid=(l+r)/2;
                if (getsum(mid)<t)l=mid+1;
                else r=mid;
            }
            printf("%d ",l);
        }
        add(a[i],1);
    }
    return 0;
}