求此题的思路
查看原帖
求此题的思路
142549
hbhz_zcy楼主2022/8/1 07:16

rt,就是cdq如何实现的。我用左区间更新右区间,正反扫两边,理论上正确但是与实际不符。然后有的题解是玄学的右边更新左边,玄学的乘上一个数(看不懂),有的题解说要右边更新左边。
不知道哪种做法正确的,求解释。

	for(int t1=l,t2=m+1;t2<=r;t2++){
		for(;a[t1].p<a[t2].p&&t1<=m;t1++)  change(a[t1].v);
		ans[a[t1].t]+=t1-l-ask(a[t2].v);//t1 stop at no_get_point
	}
	for(int i=l;i<=m;i++)  rchange(a[i].v);
	for(int t1=m,t2=r;t2>m;t2--){
		for(;a[t1].p>a[t2].p&&t1>=l;t1--)  change(a[t1].v);
		if(a[t2].t<=N)  ans[a[t2].t]+=ask(a[t2].v-1);
	}
	for(int i=l;i<=m;i++)  rchange(a[i].v);
2022/8/1 07:16
加载中...