每次按顺序将序列依次加入树状数组d[x]中,d[x]表示当前1到x中有多少数出现,每次加入的时候判断已有的比加入的数大的数。
添加:
因为数x会对比它小的数做出贡献,因而应该往下更改树状数组。
void add(int x)
{
while(x >= 1)
{
d[x]++;
x -= lowbit(x);
}
}
查询
从数x开始一直网上累加,算出当前已有的数中比x-1大的数的个数。
int ask(int x)
{
int ans = 0;
while(x <= n)
{
ans += d[x];
x += lowbit(x);
}
return ans;
}