博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三维偏序
阅读量:5246 次
发布时间:2019-06-14

本文共 1128 字,大约阅读时间需要 3 分钟。

题解:

显然第一维可以排序

1.cdq分治

考虑前一半对后一半的影响

只需将左右两半排序,然后第三维树状数组维护就行

注意的是对于相同元素要好好处理

1是要把相同元素去重 2是排序的时候要注意

代码:

#include 
using namespace std;#define N 210000#define lowbit(x) (x&(-x))struct re{ int a,b,c,d;}a[N],b[N],aa[N];int f[N],p[N],ans[N],n,k,l;bool cmp(re x,re y){ return(x.a
q;void insert(int x,int w){ while (x<=k) { q.push(x); p[x]+=w; x+=lowbit(x); }}int query(int x){ int ans=0; while (x) { ans+=p[x]; x-=lowbit(x); } return(ans);}#define mid (h+t)/2 void cdq_fz(int h,int t){ if (h==t) return; for (int i=h;i<=t;i++) b[i]=a[i],b[i].a=i; sort(b+h,b+t+1,cmp2); for (int i=h;i<=t;i++) if (b[i].a<=mid) insert(b[i].c,b[i].d); else f[b[i].a]+=query(b[i].c); while (!q.empty()) p[q.front()]=0,q.pop(); cdq_fz(h,mid); cdq_fz(mid+1,t);}int main(){ cin>>n>>k; int nn=n; for (int i=1;i<=n;i++) cin>>a[i].a>>a[i].b>>a[i].c; sort(a+1,a+1+n,cmp); // for (int i=1;i<=n;i++) // cout<
<<" "<
<<" "<
<

 

2.线段树套平衡树

显然可以用这个维护每一个数之前有几个

转载于:https://www.cnblogs.com/yinwuxiao/p/8433886.html

你可能感兴趣的文章
POJ 2060 最小路径覆盖
查看>>
label标签作用
查看>>
Selenium2之Web自动化编写配置(Java)
查看>>
windown快速安装xgboost
查看>>
tarjan(缩点)
查看>>
Lombok插件
查看>>
Linux上安装Libssh2
查看>>
自定义EL函数
查看>>
stm32的电源
查看>>
splice的多种用法
查看>>
20162304 2017-2018-1 《程序设计与数据结构》第二周学习总结
查看>>
九.python面向对象(双下方法内置方法)
查看>>
2018-09-12
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
CSS与Theme的作用——Asp.Net
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
20165115 2017-2018-2 《Java程序设计》第四周学习总结
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
WPF自定义集合控件概述与遇到的问题
查看>>