偏序问题:

https://www.luogu.org/blog/Owencodeisking/post-xue-xi-bi-ji-cdq-fen-zhi-hu-zheng-ti-er-fen

优质题目:

https://oi.men.ci/tag/cdq/

看思想:

https://www.cnblogs.com/MyNameIsPc/p/9297296.html

https://www.cnblogs.com/mlystdcall/p/6219421.html

三维偏序

维度a,b,c

[m+1,r]对于[l,m]满足条件的个数

经过排序过,

a:

[m+1,r]的任意一个数比[l,m]的任意一个数大

这一维解决了

b:

区间合并时是按照b从小到大添加的

这一维解决了

c:

树状数组记录

注意:

1.去掉相同的项

如果不那么做,如果[m+1,r]中的一项与[l,m]中的一项相同,就会出错。

2.[l,m]的数值添加到树状数组中,最后要去掉。

https://loj.ac/problem/112

 #include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <iostream>
using namespace std; #define ll long long const int maxn=1e5+;
const int inf=1e9;
const double eps=1e-;
const int maxf=2e5+; int maxv,f[maxf],sum[maxn]; struct node
{
int a,b,c,g,v;///排b,c这两个维度只是为了找到相同的(a,b,c),没有其它的意义
bool operator<(const node &y) const
{
if (a==y.a)
{
if (b==y.b)
return c<y.c;
return b<y.b;
}
return a<y.a;
}
}d[maxn],e[maxn]; void update(int x,int y)
{
while (x<=maxv)
{
f[x]+=y;
x+=x&-x;
}
} int cal(int x)
{
int sum=;
while (x)
{
sum+=f[x];
x-=x&-x;
}
return sum;
} void cdq(int l,int r)
{
int m=(l+r)>>;
if (l==r)
return;
cdq(l,m),cdq(m+,r);
int i,j,k;
for (i=l;i<=r;i++)
d[i]=e[i];
i=l,j=m+,k=l;
while (i<=m && j<=r)
{
if (d[i].b<=d[j].b)
update(d[i].c,d[i].g),e[k++]=d[i++];
else
d[j].v+=cal(d[j].c),e[k++]=d[j++];
}
while (i<=m)
update(d[i].c,d[i].g),e[k++]=d[i++];
while (j<=r)
d[j].v+=cal(d[j].c),e[k++]=d[j++];
for (i=l;i<=m;i++)
update(d[i].c,-d[i].g);
} int main()
{
int n,m,i;
scanf("%d%d",&n,&maxv);
for (i=;i<=n;i++)
scanf("%d%d%d",&d[i].a,&d[i].b,&d[i].c),d[i].g=;
sort(d+,d+n+);
e[]=d[],m=;
for (i=;i<=n;i++)
if (d[i].a==d[i-].a && d[i].b==d[i-].b && d[i].c==d[i-].c)
e[m].g++;
else
e[++m]=d[i];
cdq(,m);
for (i=;i<=m;i++)
sum[d[i].v+d[i].g-]+=d[i].g;
for (i=;i<n;i++)
printf("%d\n",sum[i]);
return ;
}
/*
3 100
1 1 1
2 2 2
3 3 3
*/

later

https://oi.men.ci/bzoj-2253/

「BZOJ 2253」纸箱堆叠 - CDQ 分治 + DP

cdq分治(偏序)的更多相关文章

  1. SPOJ LIS2 Another Longest Increasing Subsequence Problem 三维偏序最长链 CDQ分治

    Another Longest Increasing Subsequence Problem Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://a ...

  2. COGS 2479. [HZOI 2016]偏序 [CDQ分治套CDQ分治 四维偏序]

    传送门 给定一个有n个元素的序列,元素编号为1~n,每个元素有三个属性a,b,c,求序列中满足i<j且ai<aj且bi<bj且ci<cj的数对(i,j)的个数. 对于100%的 ...

  3. BZOJ 3262: 陌上花开 [CDQ分治 三维偏序]

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  4. CDQ分治嵌套模板:多维偏序问题

    CDQ分治2 CDQ套CDQ:四维偏序问题 题目来源:COGS 2479 偏序 #define LEFT 0 #define RIGHT 1 struct Node{int a,b,c,d,bg;}; ...

  5. N维偏序:cdq分治

    cdq(陈丹琦)分治,是一种类似二分的算法.基本思想同分治: 递归,把大问题划分成若干个结构相同的子问题,直到(L==R): 处理左区间[L,mid]对右区间[mid+1,R]的影响: 合并. 它可以 ...

  6. 洛谷P3810 陌上花开 CDQ分治(三维偏序)

    好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...

  7. 浅谈CDQ分治与偏序问题

    初识CDQ分治 CDQ分治是一个好东西,一直听着dalao们说所以就去学了下. CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. ...

  8. P3810 【模板】三维偏序(陌上花开)(cdq分治)

    思路 看到这种偏序类的题目,而且不要求强制在线,可以立刻想到cdq分治 注意这题有一个问题,就是询问的是小于等于而不是小于,如果相等的话两个元素会相互贡献,而cdq的特点是右区间不能对左边有影响,所以 ...

  9. cdq分治解决三维偏序

    问题背景 在三维坐标系中有n个点,坐标为(xi,yi,zi). 定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB,zA<=zB.问对于每个点,有多少个点比它小.(n< ...

随机推荐

  1. Python 爬虫-抓取小说《鬼吹灯之精绝古城》

    想看小说<鬼吹灯之精绝古城>,可是网页版的好多广告,还要一页一页的翻,还无法复制,于是写了个小爬虫,保存到word里慢慢看. 代码如下: """ 爬取< ...

  2. WinDbg解决BHO不加载

    昨天zhengwei同学说他机器上的一个BHO不能正常加载,我把BHO的代码拿过来,在我的两台机器上都验证了一下,一台是Win7+IE8的环境,一台是XP+IE7的环境,都能正常加载.zhengwei ...

  3. LeetCode 175. Combine Two Tables (组合两个表)

    题目标签: 题目给了我们两个table,让我们合并,根据Person为主. 因为题目说了 提供person 信息,不管这个人有没有地址.所以这里用Left Join. Java Solution: R ...

  4. oracle11g 导出表报EXP-00011:table不存在。

    oracle11g 导出表报EXP-00011:table不存在. oracle11g,在用exp命令备份数据库时,如果表中没有数据报EXP-00011错误,对应的表不存在.这导致对应的空表无法备份. ...

  5. Codeforces 1166B - All the Vowels Please

    题目链接:http://codeforces.com/problemset/problem/1166/B 个元音. 思路:先判断能否弄出至少5*5的行列,然后按顺序填字符串就好了. AC代码: #in ...

  6. 精选15个国外CSS框架

    转自:http://blog.bingo929.com/css-frameworks-15.html 什么是css框架 实际上还是让我们从框架说起吧.框架就是一个你可以用于你的网站项目的基本的概念上的 ...

  7. Impala简介

  8. Windows cd

    显示当前目录名或改变当前目录. CHDIR [/D] [drive:][path]CHDIR [..]CD [/D] [drive:][path]CD [..] ..   指定要改成父目录. 键入 C ...

  9. CSS——垂直居中

    vertical-align 垂直对齐 以前我们讲过让带有宽度的块级元素居中对齐,是margin: 0 auto; 以前我们还讲过让文字居中对齐,是 text-align: center; 但是我们从 ...

  10. thinkphp ASSIGN标签

    ASSIGN标签用于在模板文件中赋值变量,用法如下: 直线电机厂家 <assign name="var" value="123" /> 在运行模板的 ...