这道题原来很水的?

noteskey

一开始以为是顺序的 m 个修改,然后选出一段最长子序列使得每次修改后都满足不降

这 TM 根本不可做啊! 于是就去看题解了,然后看到转移要满足的条件的我发出了黑人问号...

然后才发现原来是求的子序列是满足任意一次修改后不降...

于是列出两(san)个条件式子,就可以 CDQ 切掉了 QWQ

\(j<i\)

\(a_j<min_i\)

\(max_j<a_i\)

这里的 max 和 min 就是某个位置上出现过的最 大/小 值

watch out

需要注意的就是 CDQ 先处理左半部分再处理当前部分再处理右半部分,否则左半部分对右半部分的贡献就会出锅

还有就是看清楚题目,别交错题,我就是那个交错题 RE 了十几次的...

code

可能某个合并还有优化的空间?【雾

//by Judge
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
#define ll long long
using namespace std;
const int M=1e5+3;
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline bool cmax(int& a,int b){return a<b?a=b,1:0;}
inline bool cmin(int& a,int b){return a>b?a=b,1:0;}
inline int read(){ int x=0,f=1; char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} int n,m,p,ans,f[M],c[M];
struct node{ int x,l,r,id;
inline void init(int iid){
x=l=r=read(),id=iid,cmax(p,x);
}
}a[M];
inline bool cmpx(node& a,node& b){return a.x<b.x;}
inline bool cmpl(node& a,node& b){return a.l<b.l;}
inline bool cmpid(node& a,node& b){return a.id<b.id;}
inline void clear(int x){for(;x<=p;x+=x&-x) c[x]=0;}
inline void update(int x,int d){for(;x<=p;x+=x&-x) cmax(c[x],d);}
inline int query(int x,int s=0){for(;x;x^=x&-x) cmax(s,c[x]);return s;}
void CDQ(int l,int r){ if(l==r) return ; int mid=(l+r)>>1;
CDQ(l,mid),sort(a+l,a+1+mid,cmpx),sort(a+1+mid,a+1+r,cmpl);
Rg int i=l,j=mid+1;
for(;j<=r;++j){
while(i<=mid&&a[i].x<=a[j].l)
update(a[i].r,f[a[i].id]),++i;
cmax(f[a[j].id],query(a[j].x)+1);
}
while(i>l) --i,clear(a[i].r); j=r,i=l;
sort(a+l,a+1+r,cmpid);
CDQ(mid+1,r);
}
int main(){ n=read(),m=read(); Rg int x,y;
fp(i,1,n) a[i].init(i),f[i]=1;
fp(i,1,m) x=read(),y=read(),
cmin(a[x].l,y),cmax(a[x].r,y);
CDQ(1,n); fp(i,1,n) cmax(ans,f[i]);
return !printf("%d\n",ans);
}

题解 P4093 【[HEOI2016/TJOI2016]序列】的更多相关文章

  1. 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告

    P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...

  2. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  3. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  4. Luogu P4093 [HEOI2016/TJOI2016]序列 dp套CDQ

    题面 好久没写博客了..最近新学了CDQ...于是就来发一发一道CDQ的练习题 看上去就是可以dp的样子. 设\(dp_{i}\)为以i结尾的最长不下降序列. 易得:\(dp_{i}\)=\(max( ...

  5. 洛谷 P4093 [HEOI2016/TJOI2016]序列(Cdq+dp)

    题面 luogu 题解 \(Cdq分治+dp\) \(mx[i],mn[i]\)分别表示第\(i\)位最大,最小能取到多少 那么有 \(j < i\) \(mx[j] \le a[i]\) \( ...

  6. 洛谷P4093 [HEOI2016/TJOI2016]序列

    题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一个值发生变化.现在佳媛姐姐已经研究出了所有变化的可能性, ...

  7. P4093 [HEOI2016/TJOI2016]序列

    题目链接 题意分析 我们假设每一个数都有一个变动范围\([L_i,R_i]\) 那么我们令\(dp[i]\)表示以\(i\)结尾的最长不下降子序列的长度 那么就是\(dp[i]=max\{dp[j]+ ...

  8. cdq分治(hdu 5618 Jam's problem again[陌上花开]、CQOI 2011 动态逆序对、hdu 4742 Pinball Game、hdu 4456 Crowd、[HEOI2016/TJOI2016]序列、[NOI2007]货币兑换 )

    hdu 5618 Jam's problem again #include <bits/stdc++.h> #define MAXN 100010 using namespace std; ...

  9. 洛谷 P4093: bzoj 4553: [HEOI2016/TJOI2016]序列

    题目传送门:洛谷P4093. 题意简述: 给定一个长度为 \(n\) 的序列 \(a\). 同时这个序列还可能发生变化,每一种变化 \((x_i,y_i)\) 对应着 \(a_{x_i}\) 可能变成 ...

随机推荐

  1. USB虚拟串口通信

    https://blog.csdn.net/errorhai/article/details/85333914

  2. MySQL——合并查询结果

    利用  UNION 关键字,可以给出多条  SELECT  语句,并将它们的结果组合成一个结果集.合并时,两个表对应的列数和数据类型必须相同.SELECT 语句之间使用  UNION  或  UNIO ...

  3. spring整合junit进行测试

    以下只是一个模板,大家记得改变配置文件 package cn.itcast.crm.dao; import org.junit.Test; import org.junit.runner.RunWit ...

  4. node 全局对象global —— 记录在线人员

    最近做毕设的时候,在做查看在线人员这个功能的时候,一直卡顿,我的思路是数据库保存 是否在线 字段,可以在登录时和退出系统修改状态,但如果用户之间关闭窗口时候就没办法向后台发出修改在线状态的请求.我想到 ...

  5. JQ高级

    一.选择器 css语法选择器 $('css3 选择器位‘) 索引匹配 $('div:eq(0)') $('div').eq(0) 内容 $('div:contains(标签文本内容)') // 注:采 ...

  6. Keras 获取中间某一层输出

    1.使用函数模型API,新建一个model,将输入和输出定义为原来的model的输入和想要的那一层的输出,然后重新进行predict. #coding=utf-8 import seaborn as ...

  7. Linux-GitLab+Jenkins持续集成+自动化部署

    GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...

  8. window.location.href 传参中文乱码问题!!!

    不是所有地方都会用Ajax  当你使用window.location.href 来传中文参数的时候 如何避免乱码问题 js 是这样写的    下面代码中  方式 封装编码  参数 username  ...

  9. 保护代理模式-Access Proxy(Java实现)

    保护代理模式-Access Proxy 保护代理模式(Access Proxy), 也叫Protect Proxy. 这种代理用于对真实对象的功能做一些访问限制, 在代理层做身份验证. 通过了验证, ...

  10. mesbox公告加更新控制

    0为不显示,1为显示~~~~0|友情提示:任何时候,不要相信福利软件,福利网站,不乱接收别人发的的任何文件,如需使用军旗有关产品,请至官方群或官方网站下载!!|183|173~~~~162,1651, ...