hdu4742】的更多相关文章

题意:给定3维的n(<=100000)个点,求最长不下降子序列长度(对于1和2两个点,2可以放在1后面,x1<=x2,y1<=y2,z1<=z2 ),并求出有多少种方案. 思路:裸的cdq分治.. 首先可以先对x排序,就降成二维了.. 定义solve(l,r)为处理[l,r]的区间 那么solve(l,r)为如下:{ solve(l, mid) 对于l,r的点按照y关键字排序 然后从左到右(y增大方向)扫描,对于(l, mid)的点插入将值插入z离散化的数据结构里维护, 对于(mi…
HDU4742 CDQ分治,三维LIS 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4742 题意: 每个球都有三个属性值x,y,z,要求最长的lis的长度和方案数 题解: 一维LIS很好求,dp一下就行 二维的LIS,将第一维排序后,和第一维一样 那么三维的lis怎么做了,我们很容易想到将第一维排序后分治的写,分了后, 按照y排序,怎么治呢?用树状数组更新前前x的最大值,然后再用dp更新即可 这里需要注意,和陌上花开等板子题不一样,我们这里不能分…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4742 题意:求3维的LIS.. 用分治算法搞得,参考了cxlove的题解.. 首先按照x排序,然后每个三元组一个编号1-n.接下来只要考虑y和z的值,假设[l,mid]区间已经求好,那么我们对[l,r]区间按照y排序,更新[mid+1,r]区间的最优值时,只要考虑z值了,用树状数组维护z的最长LIS,遇到[mid+1,r]区间的就更新. //STATUS:C++_AC_1750MS_5348KB #…
真他娘的搞不懂cdq分治的顺序问题.但是candy?的博客里提到过,多想想吧-- #include <algorithm> #include <iostream> #include <cstdio> using namespace std; typedef pair<int,int> par; int T, n, num[100005], tot; const int mod=1<<30; par ans[100005], c[100005];…
题目链接: here 题意: 和hdu4742类似.差别就是一部分三元组是直接给出的.另一部分是用他给的那个函数生成的.还有就是这里的大于是严格的大于a>b必须ax>bx,ay>by,az>bz. 思路: 思路也和hdu4742here类似. 仅仅是有几个比較棘手的问题.如今变成严格大于了.对于y还是非常好办的.我们在排序y的时候能够使的标号大的排在前面这样就能够防止y和它一样的更新它了.感觉比較麻烦的是x一样怎么办.这个真没想出什么好办法.就仅仅有x和mid+1的x不一样的建一个…
Bryce1010模板 CDQ分治 1.与普通分治的区别 普通分治中,每一个子问题只解决它本身(可以说是封闭的) 分治中,对于划分出来的两个子问题,前一个子问题用来解决后一个子问题而不是它本身 2.试用的情况 在很多问题中(比如大多数数据结构中),经常需要添加一些动态问题,然而对动态问题的处理总是不如静态问题来得方便,于是就有了分治 但使用分治的前提是必须有一下两个性质: 修改操作对区间询问的贡献独立,修改操作互相不影响 题目允许使用离线算法 2.1 一般步骤 将整个操作序列分为两个长度相等的部…
SPOJ Another Longest Increasing Subsequence Problem 传送门:https://www.spoj.com/problems/LIS2/en/ 题意: 给定 N个数对 \((x_i,y_i)\),求最长上升子序列的长度.上升序列定义为满足\((x_i,y_i)\)对i<j 有 \(x_i<x_j\) 且 \(y_i<y_j\) 题解: 一个三维最长链问题 第一维是存位置,第二维存x,第三维存y 注意查询是查询到p[i].z-1然后更新 细节方…
UVA live 6667 三维严格LIS 传送门:https://vjudge.net/problem/UVALive-6667 题意: 每个球都有三个属性值x,y,z,要求最长的严格lis的长度和方案数 题解: 一维LIS很好求,dp一下就行 二维的LIS,将第一维排序后,和第一维一样 那么三维的lis怎么做了,我们很容易想到将第一维排序后分治的写,分了后, 按照y排序,怎么治呢?用树状数组更新前前x的最大值,然后再用dp更新即可 这里需要注意,和陌上花开等板子题不一样,我们这里不能分了左半…