树套树


  Orz zyf

  我的树套树不知道为啥一直WA……只好copy了zyf的写法TAT

  这题还可以用CDQ分治来做……但是蒟蒻不会……

//y坐标的树状数组是按权值建的……所以需要离散化……

 /**************************************************************
Problem: 2253
User: Tunix
Language: C++
Result: Accepted
Time:2808 ms
Memory:76280 kb
****************************************************************/ //BZOJ 2253
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
#define CC(a,b) memset(a,b,sizeof(a))
using namespace std;
int getint(){
int v=,sign=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') sign=-; ch=getchar();}
while(isdigit(ch)) {v=v*+ch-''; ch=getchar();}
return v*sign;
}
const int N=,M=,INF=~0u>>;
typedef long long LL;
const double eps=1e-;
/*******************template********************/
int n,tot,l[M],r[M],s[M],rnd[M],v[M],f[N],mx[M];
#define L l[x]
#define R r[x]
inline void Push_up(int x){ mx[x]=max(max(mx[L],mx[R]),s[x]); }
inline void zig(int &x){int t=L; L=r[t]; r[t]=x; Push_up(x); Push_up(t); x=t;}
inline void zag(int &x){int t=R; R=l[t]; l[t]=x; Push_up(x); Push_up(t); x=t;}
void ins(int &x,int val,int num){
if (!x){
x=++tot; v[x]=val; s[x]=mx[x]=num; L=R=; rnd[x]=rand(); return;
}
if(v[x]==val) s[x]=max(s[x],num);
else if(val<v[x]){
ins(L,val,num); if (rnd[L]<rnd[x]) zig(x);
}else{
ins(R,val,num); if (rnd[R]<rnd[x]) zag(x);
}
Push_up(x);
}
int rank(int x,int val){
if (!x) return ;
if (v[x]==val) return max(mx[L],s[x]);
else if (val<v[x]) return rank(L,val);
else return max(max(s[x],mx[L]),rank(R,val));
}
#undef L
#undef R
/********************Treap**********************/
int rt[N],_num,b[N],c[N],d[N];
void update(int x,int val,int num){
for(int i=x;i<=_num;i+=i&-i) ins(rt[i],val,num);
}
int query(int x,int val){
int ans=;
for(int i=x;i;i-=i&-i) ans=max(ans,rank(rt[i],val));
return ans;
}
/*******************Fenwick*********************/
struct data{
int x,y,z;
}a[N];
bool cmp(data a,data b){
return a.x<b.x;
}
bool cmp2(int x,int y){return b[x]>b[y];}
void init(){
LL A=getint(),P=getint();
n=getint();
b[]=;
F(i,,n*) b[i]=(LL)b[i-]*A%P,c[i]=i;
sort(c+,c+*n+,cmp2);
_num=;
F(i,,*n){
if (i== || b[c[i]]!=b[c[i-]]) _num++;
d[c[i]]=_num;
}
F(i,,n) a[i].x=d[*i-],a[i].y=d[*i-],a[i].z=d[*i];
F(i,,n){
if (a[i].y>a[i].x) swap(a[i].x,a[i].y);
if (a[i].z>a[i].x) swap(a[i].x,a[i].z);
if (a[i].z>a[i].y) swap(a[i].y,a[i].z);
}
sort(a+,a+n+,cmp);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
#endif
init();
int ans=;
for(int l=,r=;l<=n;r++,l=r){
while(a[r+].x==a[l].x) r++;
F(i,l,r) f[i]=query(a[i].y-,a[i].z-)+;
F(i,l,r) update(a[i].y,a[i].z,f[i]);
}
F(i,,n) ans=max(f[i],ans);
printf("%d\n",ans);
return ;
}
//y坐标的树状数组是按权值建的……所以需要离散化……

【BZOJ】【2253】【WC 2010 BeijingWC】纸箱堆叠的更多相关文章

  1. BZOJ 2253: [2010 Beijing wc]纸箱堆叠

    题目 2253: [2010 Beijing wc]纸箱堆叠 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 239  Solved: 94 Descr ...

  2. BZOJ2253: [2010 Beijing wc]纸箱堆叠

    题解: 其实就是求三维偏序最长链.类似于三维逆序对,我们可以用树状数组套平衡树来实现. DP方程 :f[i]=max(f[j]+1) a[j]<a[i] 我们按一维排序,另一位建立树状数组,把第 ...

  3. 【BZOJ2253】[2010 Beijing wc]纸箱堆叠 cdq分治

    [BZOJ2253][2010 Beijing wc]纸箱堆叠 Description P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n p a , , 之后,即可自动化生产三边边长为 ...

  4. BZOJ_2253_[2010 Beijing wc]纸箱堆叠 _CDQ分治+树状数组

    BZOJ_2253_[2010 Beijing wc]纸箱堆叠 _CDQ分治+树状数组 Description P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n p a , , 之后, ...

  5. 纸箱堆叠 bzoj 2253

    纸箱堆叠 (1s 128MB) box [问题描述] P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n, p, a 之后,即可自动化生产三边边长为 (a mod P, a^2 mod p ...

  6. 【BZOJ2253】纸箱堆叠 [CDQ分治]

    纸箱堆叠 Time Limit: 30 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description P 工厂是一个生产纸箱的工厂. 纸 ...

  7. [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)

    [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...

  8. 【BZOJ】2253: [2010 Beijing wc]纸箱堆叠

    题意 三维严格偏序最长链.(\(n \le 50000\)) 分析 按第一维排序然后以第二和第三维作为关键字依次加入一个二维平面,维护前缀矩形最大值. 题解 当然可以树套树....可是似乎没有随机化算 ...

  9. BZOJ2253 2010 Beijing wc 纸箱堆叠 CDQ分治

    这题之前度娘上没有CDQ分治做法,gerwYY出来以后写了一个.不过要sort3遍,常数很大. gerw说可以类似划分树的思想优化复杂度,但是蒟蒻目前不会划分树(会了主席树就懒得去弄了). 嗯 将me ...

随机推荐

  1. win7开启远程桌面

    1.启用windows防火墙 计算机管理----->服务----->Windows Firewall(双击进入,启动类型改为自动,点击应用,点击启动)2.启动gpedit.msc打开“本地 ...

  2. OSPF系列

    实验一.点对点链路上的OSPF 拓扑图 1. 首先配置好路由器R1接口地址和回环地址 2. 配置路由器R2的接口地址和回环地址 3. 配置路由器R3的接口地址和环回地址 4. 配置R1的OSPF协议 ...

  3. WebService 的创建,部署和使用

    WebService,即Web服务,能使得运行在不同机器上的不同应用无须借助,专门的第三方软件或硬件,就可相互交换数据或集成. 第一次选择WebService,是为了替代数据库远程连接.我们都知道当S ...

  4. 20141110--SQL视图

    --------------------------视图--------------------- --视图是一个虚拟表,数据来自于原表,原表的数据改变,视图也会改变 select Student.S ...

  5. Tomcat找不到service.bat文件

    说明:我们给客户做安装包,Tomcat我们设置了编码和端口,所以用绿色版的,同时又要注册成windows服务.但是bin下面没有service.bat文件(tomcat6.exe,tomcat6x.e ...

  6. C#主要支持 5 种动态创建对象的方式

    C#主要支持 5 种动态创建对象的方式: 1. Type.InvokeMember 2. ContructorInfo.Invoke 3. Activator.CreateInstance(Type) ...

  7. 单元测试SimpleTest新手入门

    最近学习单元测试,先用了下PHPunit,结果安装问题一大堆,于是立刻放弃改试simpletest,感觉简单多了.下面列出步骤. 1.下载simpletest(版本1.1.0), http://www ...

  8. mysql主从备份、主从切换的例子

    指定binlog(因为时通过binlog实现数据同步的) 配置完后重启数据库服务,用show master status可以看到Master信息. StepB: 在SerB的my.cnf中指定 [ht ...

  9. jQuery实现分页

    转载地址 http://www.cnblogs.com/xiaoruoen/archive/2012/01/11/2318199.html ;( function($){ $.extend({ &qu ...

  10. 百度云盘demo