主要是留个板子免得以后慢慢推。

模板:

//需要满足(1<<_log)>=n,且N>(1<<_log)
//多测时注意赋初值 
const int N=200005;

int t[N],_log;

inline int lowbit(int x)
{
    return x&(-x);
}

inline void add(int k,int x)
{
    for(int i=k;i<N;i+=lowbit(i))
        t[i]+=x;
}

inline int query(int k)
{
    int ans=0;
    for(int i=k;i;i-=lowbit(i))
        ans+=t[i];
    return ans;
}

inline int kth(int k)
{
    int pos=1<<_log;
    for(int i=_log-1;i>=0;i--)
        if(t[pos-(1<<i)]>=k)
            pos-=(1<<i);
        else
            k-=t[pos-(1<<i)];
    return pos;
}
View Code

相关文章: