社区讨论

为何会T(ABC D)

学术版参与者 5已保存回复 16

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
16 条
当前快照
1 份
快照标识符
@mk8cu7xr
此快照首次捕获于
2026/01/10 21:42
上个月
此快照最后确认于
2026/01/14 11:10
上个月
查看原帖
CPP
#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
#define ll long long
#define ls p<<1
#define rs p<<1|1
#define pb push_back

const ll N=5e5+10;
const ll M=1e18+10;
const ll inf=1e18;
const ll mod=1e9+7;

inline ll lowbit(ll x){
    return x&(-x);
}
ll n,q;
ll a[N];
__gnu_pbds::gp_hash_table<int,int> tr;
inline void upd(ll x){
    for(;x<M;x+=lowbit(x)){
        tr[x]++;
    }
}
inline ll qu(ll x){
    ll res=0;
    for(;x;x-=lowbit(x)){
        res+=tr[x];
    }
    return res;
}
int main(){
    //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        upd(a[i]);
    }
    while(q--){
        ll x,y;
        cin>>x>>y;
        ll l=1,r=inf;
        while(l<r){
            ll mid=(l+r)>>1;
            if((mid-x)-(qu(mid)-qu(x-1))>=y){
                r=mid;
            }
            else{
                l=mid+1;
            }
        }
        ll ans=l-1;
        ll now=ans-x-qu(ans)+qu(x-1);
        while(1){
            ll tmp=ans-1-x-qu(ans-1)+qu(x-1);
            if(tmp!=now){
                break;
            }
            ans--;
            now=tmp;
        }
        cout<<ans<<"\n";
    }
    return 0;
} 

回复

16 条回复,欢迎继续交流。

正在加载回复...