题意:N个customer,M个advertisement,每个ad只属于一个cus,每个ad都有一个点击量和一个长度值。现在对于每个询问,求出所有cus的前k大点击量的广告的总长度。
对于每个ad,求出他在所属的cus里面的排名,这个一边排序就可以了。
将长度累加到对应排名上面。树状数组维护查询就可以了。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define N 500010
ll s[N];
int n, m, q;
struct node {
int u, c, l;
bool operator<(const node&x ) const {
return (u<x.u) || (u==x.u && c>x.c);
}
} a[N];
inline int lowbit(int x) { return x & (-x); }
void add(int x, ll y) {
while (x <= m) {
s[x] += y;
x += lowbit(x);
}
}
ll sum(int x) {
ll ret