树套树


  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. Mysql中IFNULL与IN操作

    Mysql IFNULL操作 项目中用到的,当SQL查询某个字段为空的时候,查询结果中设置其值为默认值.最笨的方法当然是对查询结果进行处理了,遍历查询结果,当为空的时候,设置其值: 代码如下 复制代码 ...

  2. NSString和NSArray平时练习总结

    /*************************字符串练习****************************/ //创建字符串 //1.快速创建 NSString *str1 = @&quo ...

  3. asp.net 小技巧

    文字用一个label标签包起来,设置一个属性:for,其for的值要和复选框的id相同. <p> 1.通过点击文字,就选中复选框</p> <p>文字用一个label ...

  4. 单一职责原则(SRP)

    一个类应仅有一个引起它变化的原因. 内聚性. 每个Responsibility都是变化的一个轴线.当需求变化时,该变化会反映为类的职责的变化 当一个类耦合了多个职责时,一个职责的变化会消弱或抑制其他职 ...

  5. 初探内联方式的 onload="doSomething()"为何要加"()"?而js代码的 onload="doSomething" 和 addEventListener 为何不加"()"?

    问题引入:在看<Jquery基础教程>第四版的时,P34页有这样一段话 引用函数与调用函数 这里在将函数指定为处理程序时,省略了后面的圆括号,只使用了函数名.如果带着圆括号,函数会被立即调 ...

  6. 从0开始学习react(一)

    本人前端小菜鸡一枚,因为公司要重构网站,打算用用react,毕竟一切为了学习(装B)嘛!!! 在学习react之前,看了许多资料,博客,官方文档之类的,可我这记吃不记打的记性,还是需要在这里记录一下, ...

  7. L014-oldboy-mysql-dba-lesson14

          L014-oldboy-mysql-dba-lesson14             来自为知笔记(Wiz) 附件列表

  8. ADO.NET基本操作(CRUD、Procedure、Transaction)

    模型沿用上篇博客所提到的学生.教师.课程,以详细的代码进行演示. 增删改查 添加学生.教师.课程 using System.Data.SqlClient; namespace Test { class ...

  9. 使用winform来递归实现资源管理器

    这里主要是对TreeView控件的学习 所使用到的方法: string path=@"E:\歌词"; //获得指定文件夹下所有文件夹的名称,这是带路径的,如:E:\歌词\11111 ...

  10. 对图片进行各种样式裁对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等剪:圆形、星形、心形、花瓣形等--第三方开源--CustomShapeImageView

    CustomShapeImageView在github上的项目主页是:https://github.com/MostafaGazar/CustomShapeImageView 如果仅仅是需要获取圆形. ...