luogu

题意

其实就是四维偏序。

sol

第一维排序,然后就只需要写个\(3D-tree\)了。

据说\(kD-tree\)的单次查询复杂度是\(O(n^{1-\frac{1}{k}})\)。所以这里的复杂度是\(O(n^{\frac{5}{3}})\)。

code

#include<cstdio>
#include<algorithm>
using namespace std;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
#define ls t[o].ch[0]
#define rs t[o].ch[1]
#define cmin(a,b) (a>b?a=b:a)
#define cmax(a,b) (a<b?a=b:a)
const int N = 5e4+5;
int n,D,root,fa[N],pos[N],lim[2][3],ans,Ans;
struct node{
int d[4],id;
bool operator < (const node &b) const
{return d[D]<b.d[D];}
}a[N];
struct kdtree{int d[3],Min[3],Max[3],ch[2],v,mx;}t[N];
void mt(int x,int y)
{
for (int i=0;i<3;++i)
cmin(t[x].Min[i],t[y].Min[i]),cmax(t[x].Max[i],t[y].Max[i]);
}
int build(int l,int r,int d)
{
D=d;int o=l+r>>1;
nth_element(a+l,a+o,a+r+1);
for (int i=0;i<3;++i)
t[o].d[i]=t[o].Min[i]=t[o].Max[i]=a[o].d[i];
pos[a[o].id]=o;
if (l<o) fa[ls=build(l,o-1,(d+1)%3)]=o,mt(o,ls);
if (o<r) fa[rs=build(o+1,r,(d+1)%3)]=o,mt(o,rs);
return o;
}
bool whole(int o)
{
for (int i=0;i<3;++i)
if (t[o].Min[i]<lim[0][i]||t[o].Max[i]>lim[1][i])
return false;
return true;
}
bool in(int o)
{
for (int i=0;i<3;++i)
if (t[o].d[i]<lim[0][i]||t[o].d[i]>lim[1][i])
return false;
return true;
}
bool empty(int o)
{
for (int i=0;i<3;++i)
if (t[o].Min[i]>lim[1][i]||t[o].Max[i]<lim[0][i])
return true;
return false;
}
void query(int o)
{
if (t[o].mx<=ans) return;
if (whole(o)) {cmax(ans,t[o].mx);return;}
if (empty(o)) return;
if (in(o)) cmax(ans,t[o].v);
if (ls) query(ls);if (rs) query(rs);
}
bool cmp(node i,node j)
{
for (int k=3;~k;--k)
if (i.d[k]^j.d[k])
return i.d[k]<j.d[k];
return i.id<j.id;
}
int main()
{
n=gi();
for (int i=1;i<=n;++i)
{
for (int j=0;j<4;++j) a[i].d[j]=gi();
a[i].id=i;
}
root=build(1,n,0);
sort(a+1,a+n+1,cmp);
for (int i=1;i<=n;++i)
{
for (int j=0;j<3;++j) lim[0][j]=0,lim[1][j]=a[i].d[j];
ans=0;query(root);++ans;cmax(Ans,ans);
t[pos[a[i].id]].v=ans;
for (int p=pos[a[i].id];p;p=fa[p]) cmax(t[p].mx,ans);
}
printf("%d\n",Ans);return 0;
}

[Luogu3769][CH弱省胡策R2]TATT的更多相关文章

  1. luoguP3769 [CH弱省胡策R2]TATT

    luoguP3769 [CH弱省胡策R2]TATT PS:做这题前先切掉 P4148简单题,对于本人这样的juruo更助于理解,当然dalao就当练练手吧 题目大意: 现在有n个四维空间中的点,请求出 ...

  2. [CH弱省胡策R2]TATT

    description 洛谷 data range \[ n\le 5\times 10^4\] solution 这就是四维偏序了... 好象时间复杂度是\(O(n^{\frac{5}{3}})\) ...

  3. 【题解】[CH弱省胡策R2]TATT

    本蒟蒻第一道\(K-D-Tree\)维护\(dp\) Question 题目大意:求一条路径,使得其四个维度单调不降. 先排序消掉一维再说. 对于每一个点,初始的时候绝对长度是1啊.于是,先赋值一个1 ...

  4. 洛谷3769[CH弱省胡策R2]TATT (KDTree)(四维LIS)

    真是一个自闭的题目(调了一个上午+大半个下午) 从\(WA\)到\(WA+TLE\)到\(TLE\)到\(AC\) 真的艰辛. 首先,这个题,我们可以考虑直接上四维KDTree来解决. 对于kdtre ...

  5. 【弱省胡策】Round #5 Count

    [弱省胡策]Round #5 Count 太神仙了. \(DP\)做法 设\(f_{n,m,d,k}\)表示\(n*m\)的矩阵,填入第\(k\)个颜色,并且第\(k\)个颜色最少的一列上有\(d\) ...

  6. 弱省胡策 Magic

    弱省胡策 Magic 求\(n\)个点\(n\)的条边的简单联通图的个数. 毒瘤,还要写高精. 我们枚举环的大小\(k\),\(\displaystyle ans=\sum_{k=3}^nC_n^k ...

  7. 【ContestHunter】【弱省胡策】【Round0】(A)&【Round1】(B)

    DP+容斥原理or补集转化?/KD-Tree 唔……突然发现最早打的两场(打的最烂的两场)没有写记录……(太烂所以不忍记录了吗... 还是把搞出来了的两道题记录一下吧= =勉强算弥补一下缺憾…… Ro ...

  8. 【ContestHunter】【弱省胡策】【Round3】(C)

    容斥原理+Fib Orz HE的神犇们 蒟蒻只能改出来第三题……实在太弱 官方题解:http://pan.baidu.com/s/1o6MdtQq fib的神奇性质……还有解密a[i]的过程……这里就 ...

  9. 【ContestHunter】【弱省胡策】【Round2】

    官方题解:http://wyfcyx.is-programmer.com/posts/95490.html A 目前只会30分的暴力……DP好像很神的样子0.0(听说可以多次随机强行算? //Roun ...

随机推荐

  1. 20145219 《Java程序设计》第10周学习总结

    20145219 <Java程序设计>第10周学习总结 教材学习内容总结 Java的网络编程 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 网络概述 1.计算机 ...

  2. JVM调优总结(二)

    Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了.对于非基本类型的Java对象,其大小就值得商榷. 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有 ...

  3. CentOS限制SSH登录地址

    编辑hosts.allow文件,将允许连接的地址写进去 [root@Elements ~]# vim /etc/hosts.allow sshd:10.10.10.1:allow sshd:172.1 ...

  4. OwinStartup not firing

    https://stackoverflow.com/questions/20203982/owinstartup-not-firing 缺少依赖 Make sure you have installe ...

  5. JNI_Z_10_Java的数组

    在Java中数组分为两种: (1).基本类型数组 (2).对象类型(Object[])的数组 (数组中存放的是指向Java对象中的引用) 一个能通用于两种不同类型数组的函数: GetArrayLeng ...

  6. spring: spittr实例 构建简单的web应用

    我的环境是: jdk8, spirng4 之前照者书上说的做了,不得成功,于是网上百度,不得其然. 后来看到一篇文章,甚是所感.https://segmentfault.com/q/101000000 ...

  7. WPF的外观装饰类——Border

    public class Border : System.Windows.Controls.Decorator 说明:在另一个元素的周围绘制边框.背景或同时绘制二者.

  8. java中的几种实体类对象(PO,VO,DAO,BO,POJO)

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...

  9. zzuli 2172 队列优化dp

    2172: GJJ的日常之购物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 9  Solved: 8 SubmitStatusWeb Board De ...

  10. C#笔记之 函数可变参数

    (转自:http://blog.csdn.net/jackluangle/article/details/6539278) 其实函数的参数的可变是因为不确定函数的参数大小的原因才使用的.看下面一个列子 ...