bzoj 4553 && HEOI2016 day1t3 seq
一个序列在所有变换中都单调不降的条件是i<j,a[i]<=min[j],mx[i]<=a[j],所以套CDQ就行了。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100005
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
int a[N];
int f[N];
int mx[N],mn[N];
int tmp[N];
int v[N];
int res;
bool cmp(int x,int y)
{
if(x<=res&&y<=res)return mx[x]<mx[y];
if(x<=res)return mx[x]<=a[y];
if(y<=res)return a[x]<mx[y];
return a[x]<a[y];
}
int dp[N];
struct node
{
int lazy,zhi;
}aa[N*];
void push_down(int x)
{
if(aa[x].lazy!=)
{
aa[x*].zhi=aa[x*+].zhi=-inf;
aa[x*].lazy=aa[x*+].lazy=;
aa[x].lazy=;
}
return ;
}
int qur(int x,int l,int r,int ll,int rr)
{
if(l>=ll&&r<=rr)
{
return aa[x].zhi;
}
push_down(x);
int mid=(l+r)>>;
if(rr<=mid)return qur(x*,l,mid,ll,rr);
if(ll>mid)return qur(x*+,mid+,r,ll,rr);
return max(qur(x*,l,mid,ll,rr),qur(x*+,mid+,r,ll,rr));
}
void gai(int x,int l,int r,int pos,int z)
{
if(l==r)
{
aa[x].zhi=max(aa[x].zhi,z);return ;
}
push_down(x);
int mid=(l+r)>>;
if(pos<=mid)gai(x*,l,mid,pos,z);
else gai(x*+,mid+,r,pos,z);
aa[x].zhi=max(aa[x*].zhi,aa[x*+].zhi);
}
void solve(int l,int r)
{
if (l==r)
{
f[l]=max(f[l],);
return ;
}
int mid=(l+r)>>;
solve(l,mid);res=mid;
int cnt=;
for(int i=l;i<=r;i++)tmp[++cnt]=i;
sort(tmp+,tmp+cnt+,cmp);
aa[].lazy=;aa[].zhi=-inf;
for(int i=;i<=cnt;i++)
{
if(tmp[i]<=mid)gai(,,,a[tmp[i]],f[tmp[i]]);
else f[tmp[i]]=max(f[tmp[i]],qur(,,,,mn[tmp[i]])+);
}
solve(mid+,r);
}
int main()
{
scanf("%d%d",&n,&m);
memset(mx,0xcf,sizeof(mx));
memset(mn,0x3f,sizeof(mn));
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
mx[i]=mn[i]=a[i];
}
for(int i=;i<=m;i++)
{
int t1,t2;
scanf("%d%d",&t1,&t2);
mx[t1]=max(mx[t1],t2);
mn[t1]=min(mn[t1],t2);
}
solve(,n);
int ans=;
for(int i=;i<=n;i++)ans=max(ans,f[i]);
printf("%d\n",ans);
return ;
}
bzoj 4553 && HEOI2016 day1t3 seq的更多相关文章
- BZOJ.4553.[HEOI2016&TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)
题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j) if(a[ ...
- 洛谷 P4093: bzoj 4553: [HEOI2016/TJOI2016]序列
题目传送门:洛谷P4093. 题意简述: 给定一个长度为 \(n\) 的序列 \(a\). 同时这个序列还可能发生变化,每一种变化 \((x_i,y_i)\) 对应着 \(a_{x_i}\) 可能变成 ...
- BZOJ 4556 [HEOI2016/TJOI2016]字符串
BZOJ 4556 [HEOI2016/TJOI2016]字符串 其实题解更多是用后缀数组+数据结构的做法,貌似也不好写. 反正才学了 sam 貌似比较简单的做法. 还是得先二分,然后倍增跳到 $ s ...
- BZOJ 4553 Tjoi2016&Heoi2016 序列
Tjoi2016&Heoi2016序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值 可能会变化,但同一个时刻最 ...
- BZOJ 4553 [Tjoi2016&Heoi2016]序列 ——CDQ分治 树状数组
考虑答案的构成,发现是一个有限制条件的偏序问题. 然后三个维度的DP,可以排序.CDQ.树状数组各解决一维. #include <map> #include <cmath> # ...
- 【50.40%】【BZOJ 4553】[Tjoi2016&Heoi2016]序列
Time Limit: 20 Sec Memory Limit: 128 MB Submit: 371 Solved: 187 [Submit][Status][Discuss] Descript ...
- 【BZOJ】1798: [Ahoi2009]Seq 维护序列seq(线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1798 之前写了个快速乘..........................20多s...... 还好 ...
- 【BZOJ 1798】 [Ahoi2009]Seq 维护序列seq
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- BZOJ.4555.[HEOI2016&TJOI2016]求和(NTT 斯特林数)
题目链接 \(Description\) 求\[\sum_{i=0}^n\sum_{j=0}^iS(i,j)\times 2^j\times j!\mod 998244353\] 其中\(S(i,j) ...
随机推荐
- ionic 使用sqlite
昨天被ionic和sqlite折腾一天,怎么也无法实现读取,后来才发现,原来是codova中的sqliteplugin版本问题. 问题:Database location or iosDatabase ...
- SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨
SQLSERVER为了确保返回正确的值,或者处于性能上的顾虑,有意不重用缓存在内存里的执行计划,而重新编译执行计划的这种行为,被称为重编译(recompile).那么引发存储过程重编译的条件有哪一些呢 ...
- YourSQLDba版本升级总结
在使用YourSQLDba做数据库备份.维护时,像其它软件一样,版本升级是不可避免的.因为YourSQLDba一直在不停更新版本.扩展功能.下面介绍一下升级YourSQLDba时的具体步骤和一些注意事 ...
- web.xml is missing and <failOnMissingWebXml> is set to true 错误解决办法
对web项目的解决方案: 右击项目——>Java EE Tools——>Generate Deployment Descriptor Stub. 然后系统会在src/main/webapp ...
- 查询表结构sql
THEN obj.name ELSE '' END AS 表名, col.colorder AS 序号, col.name AS 列名, ISNULL(ep.value, N'') AS 列说明, t ...
- Tokudb 参数优化
tokudb_row_format tokudb_fast: 使用quicklz 库的压缩模式.(推荐)tokudb_small: 使用 lzma 库的压缩模式.tokudb_zlib: 使用 zli ...
- linux c++编译问题和虚拟机网络通信
1.gcc main.cpp -lstdc++ -o test5 2. service network stop service NetworkManager restart
- linux yum 工具
vim /etc/yum.repos.d/CentOS-Base.repo 编辑yum 源网址 yum list |grep vim查看vim 情况 yum remove 卸载rpm包 # yum u ...
- linux
托瓦兹跟BBS上面一堆工秳师一样, 他发现Minix虽然真癿很棒,但是谭宁邦教授就是丌愿意迚行功能癿加强,导致一堆工秳师在操作系统功能上面癿欲求丌满! 这个时候年轻癿托瓦兹就想:『既然如此,那我何丌自 ...
- ZBrush中的动态网格该怎么进行运用
DynaMesh是ZBrush最新的基础模型创建工具,该命令用于基本模型的起稿到中模的制作.使用DynaMesh完全不启用考虑模型的拓扑,可以从一个图形拉扯出整个模型的分支,本文将以一个实例简单介绍Z ...