Hdu4742 (CDQ分治)
题意:给出n个三维点对(x,y,z),可随意排列,求三维非严格最长上升子序列长度和最长上升子序列数量。
输入格式:第一行为一整数T表示用例组数,每组用例第一行为一整数n表示点数,之后n行每行三个整数x,y,z表示一个点。
输出格式:对于每组用例,输出两个整数分别表示三维非严格最长上升子序列长度和最长上升子序列数量。
#include<cstdio>
#include<algorithm>
#define mid ((l + r) >> 1)
#define mp(a, b) make_pair(a, b)
#define fi first
#define se second
using namespace std;
const int N = 1e5 + 5; typedef pair<int, int> pii; int t, n, x, y, z, len;
int kk[N];
pii dp[N], c[N]; struct Point{
int x, y, z, id;
}p[N], temp[N]; bool cmp1(const Point &a, const Point &b) { return a.x < b.x; } bool cmp2(const Point &a, const Point &b) { return a.y < b.y; } inline int lowbit(int x) { return x & -x; } pii ask(int x){
pii ans = mp(0, 0);
while(x){
if(c[x].fi > ans.fi) ans = c[x];
else if(c[x].fi == ans.fi) ans.se += c[x].se;
x -= lowbit(x);
}
return ans;
} void modify(int x, pii k){
while(x <= len){
if(c[x].fi < k.fi) c[x] = k;
else if(c[x].fi == k.fi) c[x].se += k.se;
x += lowbit(x);
}
} void clear(int x){
while(x <= len){
c[x] = mp(0, 0);
x += lowbit(x);
}
} void CDQ(int l, int r){
if(l == r) return ;
CDQ(l, mid);
for(int i = l; i <= r; ++i) temp[i] = p[i];
sort(temp + l, temp + r + 1, cmp2);
for(int i = l; i <= r; ++i){
if(temp[i].id > mid){
int id = temp[i].id;
pii q = ask(temp[i].z);
++q.first;
if(dp[id].fi < q.fi) dp[id] = q;
else if(dp[id].fi == q.fi) dp[id].se += q.se;
}
else modify(temp[i].z, dp[temp[i].id]);
}
for(int i = l; i <= r; ++i) if(temp[i].id <= mid) clear(temp[i].z);
CDQ(mid + 1, r);
} int main(){
scanf("%d", &t);
while(t--){
scanf("%d", &n);
for(int i = 1; i <= n; ++i) dp[i].fi = dp[i].se = 1;
for(int i = 1; i <= n; ++i){
scanf("%d%d%d", &x, &y, &z);
p[i] = Point{x, y, z, i};
kk[i] = z;
}
sort(p + 1, p + 1 + n, cmp1);
sort(kk + 1, kk + 1 + n);
len = unique(kk + 1, kk + 1 + n) - kk - 1;
for(int i = 1; i <= n; ++i) p[i].z = lower_bound(kk + 1, kk + 1 + len, p[i].z) - kk, p[i].id = i;
CDQ(1, n);
pii ans = mp(0, 0);
for(int i = 1; i <= n; ++i){
if(dp[i].fi > ans.fi) ans = dp[i];
else if(dp[i].fi == ans.fi) ans.se += dp[i].se;
}
printf("%d %d\n", ans.fi, ans.se);
}
return 0;
}
Hdu4742 (CDQ分治)的更多相关文章
- HDU4742 CDQ分治,三维LIS
HDU4742 CDQ分治,三维LIS 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4742 题意: 每个球都有三个属性值x,y,z,要求最长的lis的 ...
- bryce1010专题训练——CDQ分治
Bryce1010模板 CDQ分治 1.与普通分治的区别 普通分治中,每一个子问题只解决它本身(可以说是封闭的) 分治中,对于划分出来的两个子问题,前一个子问题用来解决后一个子问题而不是它本身 2.试 ...
- 【教程】简易CDQ分治教程&学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- BZOJ 2683 简单题 ——CDQ分治
[题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...
- HDU5618 & CDQ分治
Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...
- 初识CDQ分治
[BZOJ 1176:单点修改,查询子矩阵和]: 1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 200 ...
- HDU5322 Hope(DP + CDQ分治 + NTT)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5322 Description Hope is a good thing, which can ...
- BZOJ4170 极光(CDQ分治 或 树套树)
传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...
- BZOJ2683 简单题(CDQ分治)
传送门 之前听别人说CDQ分治不难学,今天才知道果真如此.之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱-- cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区 ...
- BNUOJ 51279[组队活动 Large](cdq分治+FFT)
传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案.两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中 ...
随机推荐
- 好用的css3特性-动画和3d变换
上一篇文章总结了过渡和2D变化,这一篇来总结一下动画和3D变换,动画可用的场景也很多,比如在加载的页面的时候,可以放置一个gif图,也可以自定义小动画来缓解用户等待的焦虑感,比如以下三个小圆圈转圈圈的 ...
- AVR汇编(二):AVR架构介绍
AVR汇编(二):AVR架构介绍 ATmega328P介绍 ATmega328P是Atmel公司(现Microchip公司)推出的一个基于AVR架构的高性能低功耗单片机,拥有32KB的Flash.1K ...
- c++算法之离散化
什么是离散化? 离散化,故离散数学,其中的"离散"就是不连续的意思.离散化可以保持原数值之间相对大小关系不变的情况下将其映射成正整数. 也就是给可能用到的数值按大小关系分配一个编号 ...
- 一张图读懂TuGraph Analytics开源技术架构
TuGraph Analytics(内部项目名GeaFlow)是蚂蚁集团开源的分布式实时图计算引擎,即流式图计算.通过SQL+GQL融合分析语言对表模型和图模型进行统一处理,实现了流.批.图一体化计算 ...
- The database operation was expected to affect 1 row(s), but actually affected 0 row(s); 解决乐观并发
The database operation was expected to affect 1 row(s), but actually affected 0 row(s); 解决乐观并发 1.乐观并 ...
- 完全卸载MySQL服务的方法
1. 重新运行安装文件,单击remove移除mysql.此时安装目录中的文件没有完全移除,需要手动删除安装目录的Mysql文件夹. 2. 如果MySQL服务没有移除的话,以管理员方式运行cmd命令:s ...
- ViTPose+:迈向通用身体姿态估计的视觉Transformer基础模型
身体姿态估计旨在识别出给定图像中人或者动物实例身体的关键点,除了典型的身体骨骼关键点,还可以包括手.脚.脸部等关键点,是计算机视觉领域的基本任务之一.目前,视觉transformer已经在识别.检测. ...
- 【krpano】KRPano打开黑屏: FATAL ERROR
在KRPano开发过程中,初学者打开项目经常遇到如下的问题: FATAL ERROR:tour.xml – loading failed! (0) 或者是: ERROR:Local usage wit ...
- 【逆向专题】【危!!!刑】(一)使用c#+Win32Api实现进程注入到wechat
引言 自从上篇使用Flaui实现微信自动化之后,这段时间便一直在瞎研究微信这方面,目前破解了Window微信的本地的Sqlite数据库,使用Openssl,以及Win32Api来获取解密密钥,今天作为 ...
- Solution -「洛谷 P4451」「国家集训队」整数的 lqp 拆分
Description Link. 求 \[\sum\prod_{i=1}^{m}F_{a_{i}},(m>0,a_{1},\cdots a_{m}>0,\sum a_{i}=n) \] ...