luogu P4396 [AHOI2013]作业
题目
思路
每次都是插入比之前所有数字大的数,所以之前的答案就不会改变
用fhq-treap求出原序列,然后用树状数组依次算出每个值得lis(显然g[i]=g[i-j]+1)
然后答案就是前i个得最大值(答案一定是不降的)
这里具体讲一下fhq-treap
如果你还是维护val的话,显然不对
如果要在x的位置插入y
那么我们就要把前x个和后size[rt]-x个分开
这里的关键字就成了size了(显然)
然后你就按照size进行分裂
注意递归的关键字的改变
split(ch[now][1],k-size[ch[now][0]]-1,ch[x][1],y);
错误&&傻叉
1.pushup(rt)
2.一脸茫然只会模板
代码
#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int maxn=1e5+7;
const int inf=0x3f3f3f3f;
int n,rt,a[maxn],a_size;
int read() {
int x=0,f=1;char s=getchar();
for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
struct node {
int ch[maxn][2],val[maxn],pri[maxn],size[maxn],cnt;
int make_edge(int a) {val[++cnt]=a;size[cnt]=1;pri[cnt]=rand();return cnt;}
void pushup(int x) {size[x]=size[ch[x][0]]+size[ch[x][1]]+1;}
int merge(int x,int y) {
if(!x||!y) return x+y;
if(pri[x]<pri[y]) {
ch[x][1]=merge(ch[x][1],y);
pushup(x);return x;
} else {
ch[y][0]=merge(x,ch[y][0]);
pushup(y);return y;
}
}
void split(int now,int k,int &x,int &y) {
if(!now) x=y=0;
else {
if(size[ch[now][0]]+1<=k) x=now,split(ch[now][1],k-size[ch[now][0]]-1,ch[x][1],y);
else y=now,split(ch[now][0],k,x,ch[y][0]);
pushup(now);
}
}
void insert(int a,int i) {
int x,y;
split(rt,a,x,y);
rt=merge(merge(x,make_edge(i)),y);
}
void dfs(int now) {
if(!now) return;
dfs(ch[now][0]);
a[++a_size]=val[now];
dfs(ch[now][1]);
}
}dsr;
struct BIT{
int ma[maxn];
int lowbit(int x) {
return x&(-x);
}
void add(int id,int x) {
for(int i=id;i<=n;i+=lowbit(i))
ma[i]=max(ma[i],x);
}
int query(int x) {
int ans=0;
for(int i=x;i>=1;i-=lowbit(i))
ans=max(ma[i],ans);
return ans;
}
}tree;
int ans[maxn];
int main() {
srand(time(NULL));
n=read();
FOR(i,1,n) {
int x=read();
dsr.insert(x,i);
}
dsr.dfs(rt);
FOR(i,1,n) {
ans[a[i]]=tree.query(a[i]-1)+1;
tree.add(a[i],ans[a[i]]);
}
FOR(i,1,n) ans[i]=max(ans[i],ans[i-1]),cout<<ans[i]<<"\n";
return 0;
}
luogu P4396 [AHOI2013]作业的更多相关文章
- 【题解】Luogu P4396 [AHOI2013]作业
原题传送门 最快的解法好像是cdq,但窝只会莫队+线段树/树状数组的做法 题目要我们求1.在区间[l,r]中值域在[a,b]中有多少个数2.在区间[l,r]中值域在[a,b]中有多少个不同数 一眼就看 ...
- bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)
题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不 ...
- P4396 [AHOI2013]作业 分块+莫队
这个题正解是莫队+树状数组,但是我个人非常不喜欢树状数组这种东西,所以决定用分块来水这个题.直接在莫队维护信息的时候,维护单点同时维护块内信息就行了. 莫队就是这几行核心代码: void add(in ...
- 洛谷P4396 [AHOI2013]作业(树套树)
题意 题目链接 Sol 为什么一堆分块呀..三维数点不应该是套路离线/可持久化+树套树么.. 亲测树状数组套权值线段树可过 复杂度\(O(nlog^2n)\),空间\(O(nlogn)\)(离线) # ...
- P4396 [AHOI2013]作业
题目链接 luogu4396 思路 唯有水题暖人心 咕了4天,今天跟着std对拍才做出来不得不说题解真的水的一批 先离散化一下 第一问差分询问,权值树状数组套一套就好了 \(nlog_{n}\) 第二 ...
- 洛谷 P4396 [AHOI2013]作业
题目描述 题目传送门 分析 因为询问是关于区间的,并且没有强制在线,所以能用莫队解决 但是还要支持查询区间内大于等于 \(a\),小于等于 \(b\) 的数的个数和数值的个数 所以还要套一个数据结构 ...
- [AHOI2013]作业 (莫队+分块)
[AHOI2013]作业 (莫队+分块) 题面 给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间[l,r],首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小 ...
- BZOJ3236: [AHOI2013]作业
BZOJ3236: [AHOI2013]作业 题目描述 传送门 行,我知道是Please contact lydsy2012@163.com! 传送门2 题目分析 这题两问还是非常,emmmm. 首先 ...
- BZOJ 3236: [Ahoi2013]作业
3236: [Ahoi2013]作业 Time Limit: 100 Sec Memory Limit: 512 MBSubmit: 1393 Solved: 562[Submit][Status ...
随机推荐
- Distribution(F题)---第八届河南省程序设计大赛
Description One day , Wang and Dong in the Dubai desert expedition, discovered an ancient castle. Fo ...
- CentOS7 firewall防火墙配置笔记
开启端口 # firewall-cmd --zone=public --add-port=/tcp --permanent 命令含义: --zone #作用域 --ad ...
- 虚拟机中安装Ubuntu 16.04
1.安装vmware软件(虚拟机管理软件) https://blog.csdn.net/salmon_zhang/article/details/79468918 2.安装Ubuntu https:/ ...
- java注解使用
1:定义注解 package chapter20.one; import java.lang.annotation.ElementType; import java.lang.annotation.R ...
- Saving Princess claire_(hdu 4308 bfs模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=4308 Saving Princess claire_ Time Limit: 2000/1000 MS (Jav ...
- 【Cocos2dx 3.x Lua】CCParallaxNode使用
我们知道,当我们移动时,我们会看到离我们越近的物体,会移动的越快,越远的物体,比如远处的山会移动的很慢,而最远处的物体,比如太阳几乎不动,这个现象叫视差,而在游戏中模仿视差,可以让玩家感觉到游戏中的角 ...
- 菜刀php过waf
关于PHP 一.waf为啥会拦截菜刀.菜刀在连接时,会向server端POST数据,抓包查看: 会看到他向server端post了 @eval(base64_decode($_POST[z0])); ...
- 训练/验证/测试集设置;偏差/方差;high bias/variance;正则化;为什么正则化可以减小过拟合
1. 训练.验证.测试集 对于一个需要解决的问题的样本数据,在建立模型的过程中,我们会将问题的data划分为以下几个部分: 训练集(train set):用训练集对算法或模型进行训练过程: 验证集(d ...
- Http请求中Content-Type和Accept讲解以及在Spring MVC中的应用
在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在 ...
- VMware Coding Challenge: Possible Scores && Summary: static
Combination Sum I 那道题的变体 /* * Complete the function below. */ static int is_score_possible(int score ...