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. Spring 之通过 XML 装配 bean

    1.关于 使用传统标签还是 c- p- 命名空间定义的标签, 我的观点是能用  c- p- 命名空间定义的标签 就不用 传统标签(这样会比较简洁... 2.强依赖使用构造器注入,可选性依赖使用属性注入 ...

  2. SVN使用—概念及生命周期

    一.SVN简介 Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Ap ...

  3. Apache 配置参数

    参数说明 1.Global Environment 全局环境配置,决定Apache服务器的全局参数3.Virtual Hosts—虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚 ...

  4. 构造函数与super

    1. 当不定义构造方法,系统会为类隐式的创建一个空的无参构造方法 2. 当类定义了有参的构造方法,系统就不会为类创建无参构造方法 3. 子类中,若不显式调用super(), super()会被隐式调用 ...

  5. Hibernate 菜鸟教程 异常 集锦

    异常1.Error parsing JNDI name [foo] 异常信息摘要: org.hibernate.engine.jndi.JndiException: Error parsing JND ...

  6. springBean参数注入的几个方法

    1.普通方式注入 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  7. JSON和GSON的使用

    JSONObject 处理问题 相关博客参考:https://www.cnblogs.com/free-dom/p/5801866.html json-lib 和google gson 的使用 Tor ...

  8. JAVA 多线程轮流打印ABC

    采用Thread+Semaphore实现,思路很简单 import java.io.IOException; import java.util.concurrent.Semaphore; public ...

  9. aps.net session全面介绍(生命周期,超时时间)

    Asp.Net中的Session与Cookie最大的区别在于:Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标记,而真正的数据都是放在服务端的内存之中的 ...

  10. LightOJ - 1341唯一分解定理

    唯一分解定理 先分解面积,然后除2,再减去面积%长度==0的情况,注意毯子不能是正方形 #include<map> #include<set> #include<cmat ...