压行真漂亮

首先这肯定是一个\(dp\)了

设\(dp_i\)表示\(i\)结尾的最长不下降子序列的长度

显然我们要找一个\(j\)来转移

也就是\(dp_i=max(dp_j+1)\)

那么什么样的\(j\)满足条件呢

首先得是\(j<i\)

我们还注意到一个条件就是这个序列里最多也只有一个位置会发生变化

可能是\(i\)这个位置发生变化,那么显然需要满足对于任意的\(a_i\)都需要满足大于等于\(val_j\)

于是就有\(val_j<=min_i\)

自然也有可能是前面的\(j\)发生变化,显然就是\(max_j<=val_i\)

之后这就是一个三维偏序了,\(CDQ\)分治就可以啦

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define re register
#define lowbit(x) ((x)&(-x))
#define maxn 100005
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
int n,m,M;
int c[maxn];
inline void add(int x,int val) {for(re int i=x;i<=M;i+=lowbit(i)) c[i]=max(c[i],val);}
inline void clear(int x) {for(re int i=x;i<=M;i+=lowbit(i)) c[i]=0;}
inline int ask(int x) {int now=0;for(re int i=x;i;i-=lowbit(i)) now=max(c[i],now);return now;}
struct Point {int x,y,rk,ans,v;}a[maxn];
inline int cmp1(Point A,Point B) {return A.x<B.x;}
inline int cmp2(Point A,Point B) {return A.v<B.v;}
inline int cmp3(Point A,Point B) {return A.rk<B.rk;}
void CDQ(int s,int t)
{
if(s==t) return;
int mid=s+t>>1;
CDQ(s,mid),std::sort(a+s,a+mid+1,cmp2),std::sort(a+mid+1,a+t+1,cmp1);
int i=s,j=mid+1;
while(i<=mid&&j<=t)
if(a[i].v<=a[j].x) add(a[i].y,a[i].ans),i++;
else {int now=ask(a[j].v)+1;a[j].ans=max(a[j].ans,now),j++;}
while(j<=t) {int now=ask(a[j].v)+1;a[j].ans=max(a[j].ans,now),j++;}
for(re int k=s;k<i;k++) clear(a[k].y);
std::sort(a+mid+1,a+t+1,cmp3);CDQ(mid+1,t);
}
int main()
{
n=read(),m=read();
int A,B; for(re int i=1;i<=n;i++) a[i].x=a[i].y=read(),M=max(M,a[i].x),a[i].rk=i,a[i].ans=1,a[i].v=a[i].x;
for(re int i=1;i<=m;i++) A=read(),B=read(),a[A].y=max(a[A].y,B),M=max(M,a[A].y),a[A].x=min(a[A].x,B);
CDQ(1,n);int tot=0;for(re int i=1;i<=n;i++) tot=max(tot,a[i].ans);printf("%d\n",tot);
return 0;
}

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

  1. 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; ...

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

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

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

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

  4. 题解 P4093 【[HEOI2016/TJOI2016]序列】

    这道题原来很水的? noteskey 一开始以为是顺序的 m 个修改,然后选出一段最长子序列使得每次修改后都满足不降 这 TM 根本不可做啊! 于是就去看题解了,然后看到转移要满足的条件的我发出了黑人 ...

  5. 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[ ...

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

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

  7. BZOJ4553:[HEOI2016/TJOI2016]序列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4553 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某 ...

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

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

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

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

随机推荐

  1. 删除Panl控件中窗体的方法

    //删除窗体方法 private void CloseFrm() { foreach (Control item in panel1.Controls) { if (item is Form) //判 ...

  2. 个人开源项目之异步Http线程池框架

    项目开源于:https://github.com/HouZhiHouJue/AsyncHttpThreadPool 示意图:

  3. VS2013漂亮字体

    使用字体:Fixedsys Excelsior 3.011.首先下载字体:http://www.fixedsysexcelsior.com/ 2.安装字体:控制面板 -> 字体,复制下载的文件进 ...

  4. 多线程-lock锁

    package 多线程.lock锁; import java.util.concurrent.locks.ReentrantLock; /*. * * //同步代码块 * * */ public cl ...

  5. memcached 细究(三)

    今天研究ecshop的cls_mysql类库, 涉及到mysql 和memcache 的整合 category.php 商品属性帅选时使用memcache缓存 mysql public functio ...

  6. DButils分析

    package com.ldf.utils; import java.sql.Connection; public class DBUtils { private static String driv ...

  7. JSON 解析的可抛弃

    先看例子, json文件中有些元素不是我们想要的,在反序列化时可以当它们不存在,下面例子抛弃了 aaa.ccc这两节. package main import (     "encoding ...

  8. hashlib 文件校验,MD5动态加盐返回加密后字符

    hashlib 文件校验 # for循环校验 import hashlib def check_md5(file): ret = hashlib.md5() with open(file, mode= ...

  9. csharp: string Encoding

    /// <summary> /// 中文转unicode /// </summary> /// <param name="str"></p ...

  10. BZOJ P4720[Noip2016]换教室____solution

    题目太长不表 <--无形传送,最为致命 学习一点数学期望的基础,预处理最短路,然后加上DP即可.(废话) 理解决策和结果的差别: 在这里每阶段的决策有两个:申请|不申请 结果有两个:换|不换 然 ...