BZOJ 4553 Tjoi2016&Heoi2016 序列
Description
佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他。玩具上有一个数列,数列中某些项的值
Input
输入的第一行有两个正整数n, m,分别表示序列的长度和变化的个数。接下来一行有n个数,表示这个数列原始的
Output
输出一个整数,表示对应的答案
Sample Input
1 2 3
1 2
2 3
2 1
3 4
Sample Output
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <complex>
#include <stack>
#define LL long long int
#define dob double
using namespace std; const int N = 100010;
struct Data{int rk,l,a,r,len;}s[N],f[N];
int n,m,T[N],Ans; int gi()
{
int x=0,res=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')res*=-1;ch=getchar();}
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*res;
} inline bool cmpa(const Data &a,const Data &b){return a.a<b.a;} inline int lb(int k){return k&-k;} inline void update(int x,int mx){for(;x<=n;x+=lb(x))T[x]=max(T[x],mx);} inline int query(int x){int ans=0;for(;x;x-=lb(x))ans=max(ans,T[x]);return ans;} inline void clean(int x){for(;x<=n;x+=lb(x))T[x]=0;} inline void merge(int l,int r)
{
if(l==r)return;
int mid=(l+r)>>1;
int x=l,y=mid+1,i=l;
Data f[N];
while(x<=mid && y<=r){
if(s[x].r<=s[y].r)
f[i++]=s[x++];
else f[i++]=s[y++];
}
while(x<=mid)f[i++]=s[x++];
while(y<=r)f[i++]=s[y++];
for(i=l;i<=r;++i)s[i]=f[i];
} inline void CDQ(int l,int r)
{
if(l==r){s[l].len=max(s[l].len,1);return;}
int mid=(l+r)>>1;
int x=l,y=mid+1;
for(int i=l;i<=r;++i)
if(s[i].rk<=mid)f[x++]=s[i];
else f[y++]=s[i];
for(int i=l;i<=r;++i)s[i]=f[i];
CDQ(l,mid);merge(l,mid);
x=l;y=mid+1;
while(x<=mid && y<=r){
if(s[x].r<=s[y].a)
update(s[x].a,s[x].len),++x;
else s[y].len=max(s[y].len,query(s[y].l)+1),++y;
}
while(y<=r)s[y].len=max(s[y].len,query(s[y].l)+1),++y;
for(int i=l;i<=mid;++i)clean(s[i].a);
CDQ(mid+1,r);merge(mid+1,r);
} int main()
{
n=gi();m=gi();
for(int i=1;i<=n;++i)
s[i].rk=i,s[i].l=s[i].r=s[i].a=gi(),s[i].len=0;
for(int i=1;i<=m;++i){
int x=gi(),y=gi();
s[x].l=min(s[x].l,y);
s[x].r=max(s[x].r,y);
}
sort(s+1,s+n+1,cmpa);
CDQ(1,n);
for(int i=1;i<=n;++i)Ans=max(Ans,s[i].len);
printf("%d\n",Ans);
return 0;
}
BZOJ 4553 Tjoi2016&Heoi2016 序列的更多相关文章
- BZOJ 4553 [Tjoi2016&Heoi2016]序列 ——CDQ分治 树状数组
考虑答案的构成,发现是一个有限制条件的偏序问题. 然后三个维度的DP,可以排序.CDQ.树状数组各解决一维. #include <map> #include <cmath> # ...
- 4553: [Tjoi2016&Heoi2016]序列
4553: [Tjoi2016&Heoi2016]序列 链接 分析: 注意所有m此操作中,只会发生一个,于是考虑dp.dp[i]=dp[j]+1,j<i,a[j]<=L[i],R[ ...
- [BZOJ4553][TJOI2016&&HEOI2016]序列(CDQ分治)
4553: [Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1202 Solved: 554[Su ...
- [BZOJ4553][Tjoi2016&Heoi2016]序列 cdp分治+dp
4553: [Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 260 Solved: 133[Sub ...
- 【BZOJ4553】[Tjoi2016&Heoi2016]序列 cdq分治+树状数组
[BZOJ4553][Tjoi2016&Heoi2016]序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能 ...
- bzoj4553 [Tjoi2016&Heoi2016]序列 树状数组(区间最大值)+cqd
[Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1006 Solved: 464[Submit][ ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序
4552: [Tjoi2016&Heoi2016]排序 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 579 Solved: 322[Sub ...
- BZOJ 4551: [Tjoi2016&Heoi2016]树
4551: [Tjoi2016&Heoi2016]树 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 748 Solved: 394[Subm ...
- Bzoj 4556: [Tjoi2016&Heoi2016]字符串
4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 177 Solved: 92[Sub ...
随机推荐
- C语言之++--
#include<stdio.h>int main(){int num,count=0,i=0;scanf("%d",&num);printf("nu ...
- python_day05(去爬登录的豆瓣)
# 爬豆瓣需要用cookie# 需要注意隐藏的参数,即input 里面的默认的一些参数# 需要自己注册一个账户密码import urllib.requestimport http.cookiejarf ...
- 2.1synchronized同步方法
由前言: 在第一章已经出现了非线程安全的情况."非线程安全"其实会发生在多个线程同时对同一个对象中的实例变量进行访问时发生.产生的结果就是脏读(读到被修改过的数据). " ...
- 利用python对excel进行数据剔除
需求分析: 判断excel2表中的某个唯一字段是否满足条件,如果满足条件,就在excel1中进行查询,若存在excel中,就将该数据进行剔除. python脚本的实现: from __future__ ...
- LoadRunner性能测试过程中报Error(-17998):Failed to get [param not passed in call] thread TLS entry.
最近与其他公司一起合作使用loadrunner11进行性能测试,在此过程中,遇到Error(-17998)的错误,从网上搜索,找到的答案基本上都是说没有定义事务,但检查所有测试代码,发现都已经定义了事 ...
- bootstarp-fileinput上传 火狐防止拖入文件直接打开新页面
今日接触了一个bootstarp的上传插件,发现其功能很强大,具体名为bootstarp-fileinput,需要的可以自行度一下. 然后当使用其拖拽功能时,其他浏览器没出毛病,独火狐浏览器拖入时直接 ...
- Python中的冒泡排序
冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也 ...
- Heritrix1.14.4在Eclipse的配置和使用
转载 1.首先在 Eclipse 中新建 Java 工程 ,工程名自取,以MyHeritrix为例.利用下载的源代码包根据以下步骤来配置这个工程. 2.导入类库 Heritrix 所用到的工具类库都在 ...
- request和response中文乱码问题后台处理办法
request接收参数的中文乱码的处理: GET: 方法一:使用String的构造方法: new String(request.getParameter("传过来的name").g ...
- Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用
1.下载extundelete包,安装依赖 我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel. yum ...