此题正解 树套树
&&CDQ也要会啦首先按删除顺序,给每个点赋时间值,没删的赋inf
按时间从小到大排序,后删除的对先删除的莫得贡献,但是先删除的对后删除的有贡献第二维 按pos值从小到大排序
维护两个东西
{posi<posj&&vali>valj}{posi>posj&&vali<valj}
然后 莫得了
#include#define re return#define lowbit(x) (x&(-x))#define inc(i,l,r) for(int i=l;i<=r;++i)#define dec(i,l,r) for(int i=l;i>=r;--i)const int maxn=100005;using namespace std;template inline void rd(T& x){ char c;bool f=0; while((c=getchar())<'0'||c>'9')if(c=='-')f=1; x=c^48; while((c=getchar())>='0'&&c<='9')x=x*10+(c^48); if(f)x=-x;}int n,m,c[maxn],pos[maxn],d[maxn];long long ans;struct node{ int timme,val,pos,ans; bool operator<(node a)const {re timme >1; CDQ(l,mid),CDQ(mid+1,r); int q=r,tot=l; dec(i,mid,l) { while(q>mid&&num[q].pos>num[i].pos)add(num[q].val,1),--q; num[i].ans+=sum(num[i].val-1); } inc(i,q+1,r)add(num[i].val,-1); q=mid+1; inc(i,l,mid) { while(q<=r&&num[q].pos