题目链接:https://www.luogu.org/problemnew/show/P3810
题解:三维偏序,cdq分治来解,首先对于首先第一维有序,然后按照一维排序后的第二维二分,树状数组维护第三维。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int pp[maxn*2],n,k;
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int val)
{
while(x<=k)
{
pp[x]+=val;
x+=lowbit(x);
}
}
int query(int x)
{
int ans=0;
while(x)
{
ans+=pp[x];
x-=lowbit(x);
}
return ans;
}
struct node
{
int a,b,c,siz,mm;
}s[maxn];
int cmp(node p,node q)
{
if(p.a==q.a&&p.b==q.b) return p.c<q.c;
else if(p.a==q.a) return p.b<q.b;
else return p.a<q.a;
}
int cmp1(node p,node q)
{
if(p.b==q.b) return p.c<q.c;