树套树


  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. 使用script的src实现跨域和类似ajax效果

    在解决js的跨域问题的时候, 有多种方式, 其中有一种是利用script标签的src属性,因为这个属性是不受域名限制的,我们可以直接让src的这个链接指向跨域网站的一个接口, 这个接口返回的是js代码 ...

  2. HTML5桌面通知(Web Notifications)实例解析

    先上一段代码,ie不支持,Chrome.fireFox.Opera支持 <!DOCTYPE html> <html> <head> <meta http-eq ...

  3. iOS 自定义view里实现控制器的跳转

    1.view里实现控制器的modal 拿到主窗口的根控制器,用根控制器进行modal需要的modal的控制器 场景:点击自定义view里的按钮实现控制器的modal UIViewController ...

  4. 10款精美的web前端源码的特效

    1.HTML5侧滑聊天面板 很酷的聊天界面 这是一款基于HTML5和SVG的侧滑聊天面板,初始化的时候聊天面板是锁定的,当你拖动白色区域时,即可解锁展开聊天面板,显示所有好友.点击面板中的好友即可切换 ...

  5. 《JavaScript高级程序设计》心得笔记-----第四篇章

    第十六章 1.  跨文档消息传送: postMessage("消息", "发送消息的文档所在域") 2.  拖放事件: 1)   拖动某元素会依次触发:drag ...

  6. oracle 数据库导入导出

    要把公司的数据库导入到自己的电脑上(都需要再命令窗口下输入指令) 导出数据库的基本代码: exp zj_user_kf/oracle@tzsw_4 file=d:\test3.dmp full=y 导 ...

  7. 网络A、B、C类IP地址的区别

    学网络之前得先要明白几个概念:(起初我也不怎么知道后来就慢慢会了) 1字节=8位,1位就是1个数字,所以1字节等于8个数字. 2的8次方,和二进制11111111转换为十进制并不一回事. 0-127是 ...

  8. APUE习题8.7

    看书的时候发现这个习题没有答案,于是就想把自己做的结果贴上来,和大家分享分享! 首先把题目贴上来吧: /*********** 8.10节中提及POSIX.1要求在调用exec时关闭打开的目录流.按下 ...

  9. stanford moss

    A System for Detecting Software Plagiarism UPDATES May 18, 2014 Community contributions (incuding a ...

  10. 【Qt】Qt之重启应用程序【转】

    简介 今天分享的内容有些意思-如何重启一个应用程序.其实,有时候这是一个很重要的功能点,而且很人性化.易用性很好. 例如:切换用户.当某个用户登录成功之后,需要切换到其它账号,那么这时,你就知道它的重 ...