题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6609
解题思路:
先把给出来的值离散化,对于值相同位置不同的数离散化后的值不相同。
两个树状数组,一个维护区间内的和,一个维护区间内的个数。
对于每个i二分答案,找到右界之后询问第二个树状数组得到剩余的个数x,那么去掉的就是(i-1)-x
代码:(注意行末空格)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<map>
#include<set>
using namespace std;
#define ll long long
#define for1(i,a,b) for (int i=a;i<=b;i++)
#define for0(i,a,b) for (int i=a;i<b;i++)
#define pb push_back
#define fi first
#define se second
#define debug(x) printf("----Line %s----\n",#x)
#define pt(x,y) printf("%s = %d\n",#x,y)
#define INF 0x3f3f3f3f
#define df(x)