设f[i]是以i位置为结尾的最长满足条件子序列的长度

那么j能转移到i的条件是,$j<i , max[j]<=a[i] , a[j]<=min[i]$,其中max和min表示这个位置能变化出来的最大值或最小值

这个东西用一个cdq来做

具体来说,先做左半区间,然后左边按max排序,右边按a排序,把左边的f按a为下标加到树状数组里,右面的用min来查,最后在做右半区间

 1 #include<bits/stdc++.h>
 2 #define CLR(a,x) memset(a,x,sizeof(a))
 3 using namespace std;
 4 typedef long long ll;
 5 typedef unsigned long long ull;
 6 typedef pair<int,int> pa;
 7 const int maxn=1e5+10;
 8
 9 inline ll rd(){
10     ll x=0;char c=getchar();int neg=1;
11     while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();}
12     while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
13     return x*neg;
14 }
15
16 int N,M,V=1e5,a[maxn],ma[maxn],mi[maxn],f[maxn],ord[maxn];
17
18 inline bool cmp1(int x,int y){return a[x]<a[y];}
19 inline bool cmp2(int x,int y){return mi[x]<mi[y];}
20
21 int tr[maxn];
22 inline int lowbit(int x){return x&(-x);}
23 inline void change(int x,int y){
24     for(;x<=V;x+=lowbit(x)) tr[x]=y?max(tr[x],y):0;
25 }
26 inline int query(int x){
27     int re=0;for(;x;x-=lowbit(x)) re=max(re,tr[x]);return re;
28 }
29
30 inline void cdq(int l,int r){
31     if(l>=r) return;
32     int m=l+r>>1;
33     cdq(l,m);
34     for(int i=l;i<=r;i++) ord[i]=i;
35     sort(ord+l,ord+m+1,cmp1),sort(ord+m+1,ord+r+1,cmp2);
36     int p=l,q=m+1;
37     for(;q<=r;q++){
38         for(;p<=m&&a[ord[p]]<=mi[ord[q]];p++) change(ma[ord[p]],f[ord[p]]);
39         f[ord[q]]=max(f[ord[q]],query(a[ord[q]])+1);
40     }
41     for(p=l;p<=m;p++) change(ma[ord[p]],0);
42     cdq(m+1,r);
43 }
44
45 int main(){
46     //freopen("","r",stdin);
47     int i,j,k;
48     N=rd(),M=rd();
49     for(i=1;i<=N;i++)
50         a[i]=ma[i]=mi[i]=rd(),f[i]=1;
51     for(i=1;i<=M;i++){
52         int x=rd(),y=rd();
53         ma[x]=max(ma[x],y),mi[x]=min(mi[x],y);
54     }
55     cdq(1,N);
56     int ans=0;
57     for(i=1;i<=N;i++) ans=max(ans,f[i]);
58     printf("%d\n",ans);
59     return 0;
60 }

转载于:https://www.cnblogs.com/Ressed/p/9997125.html

luogu4093 序列 (cdq分治优化dp)相关推荐

  1. [BZOJ4553][TJOI2016HEOI2016]序列(CDQ分治)

    4553: [Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1202  Solved: 554 [ ...

  2. CF868F 分治优化dp

    链接:https://codeforces.com/problemset/problem/868/F 首先n^2m的dp很容易想,f(j,i)表示考虑划分了j个集合,最后一个集合结尾在i的最小值.显然 ...

  3. [CF1442 D] Sum(分治优化dp + 结论)

    CF1442D Sum problem solution code problem luogu翻译 solution 部分分做法,预处理每组前缀和,暴力背包 dpdpdp 转移:dpi,j=max⁡{ ...

  4. 三维偏序/cdq分治/

    三维偏序---cdq分治 cdq分治概述 二维偏序概述 二维偏序例题分析 三维偏序概述 例题分析 cdq分治概述 前置知识:(如果不懂要先去了解分治) > 分治: > 分而治之,将原问题不 ...

  5. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)

    BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化) 1 #include<algorithm> 2 #include<iostream> 3 #include ...

  6. BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]

    传送门 题意:不想写... 扔链接就跑 好吧我回来了 首先发现每次兑换一定是全部兑换,因为你兑换说明有利可图,是为了后面的某一天两种卷的汇率差别明显而兑换 那么一定拿全利啊,一定比多天的组合好 $f[ ...

  7. NOI2007 货币兑换 - CDQ分治斜率优化dp

    斜率优化dp维护一个凸壳.如果\(x, y\)坐标都递增,可以用单调队列,如果只有\(x\)递增,可以在凸壳上二分斜率,如果\(x, y\)都不递增,则需要在凸包中插入,可以用平衡树或cdq分治维护. ...

  8. bzoj1492 货币兑换cash dp斜率优化+splay/cdq分治

    斜率优化 首先,由于如果在i天买在j天卖有利可图,那么最优方法就是在i天花完钱在j天卖完.我们令 f i f_i fi​为第i天可以得到的最多钱数,然后可以先列方程求出花完钱在第j天得到的两种金券数 ...

  9. 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治

    [BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...

  10. 【牛客NOIP模拟】 牛牛的RPG游戏【二维偏序】【任意坐标斜率优化】【CDQ 分治】【李超线段树】

    题意: n×mn\times mn×m 的网格图,每个点有两个权值 vali,j,bufi,jval_{i,j},buf_{i,j}vali,j​,bufi,j​,从 (1,1)(1,1)(1,1) ...

最新文章

  1. mycat mysql 主从切换_Mycat读写分离与主从切换
  2. python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别
  3. MySQL基本架构图
  4. linux 查询oracle情况,在Linux下使用SQLPlus查看Oracle数据库表空间及使用率
  5. [大数据行业应用发展前景分析] 阿里潘永花报告:大数据产业将成为新的煤和石油介绍...
  6. Linux文件中开始处的feff,行末的^M
  7. java scene_Java Scene類代碼示例
  8. poj 3071 Football 概率dp
  9. Hadoop之crontab与ntpd
  10. vue插件开发练习--实用弹窗
  11. MFC windows程序设计(第三版)课后习题第一章
  12. 串口485接法图_rs485 与485通讯 接线方法?
  13. linux查看cpu架构命令,linux查看cpu型号命令
  14. 阿里云mysql导出表_mysql导出数据库表
  15. C++扫描指定主机开放的端口
  16. win10 下 pdfium编译 VS2017
  17. 使用CubeMX生成工程时Debug模式为No Debug与Serial Wire的代码差异
  18. 05快速排序(不稳定)
  19. GJB-150三防试验机构,国军标试验机构
  20. 2020起重机司机(限桥式起重机)模拟考试系统及起重机司机(限桥式起重机)考试试题

热门文章

  1. Gym - 101808K Another Shortest Path Problem (Damascus University Collegiate)【并查集+LCA】
  2. elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
  3. 网易严选小程序 ( 前端 ):mpvue-shop
  4. 从面试官的角度聊聊培训班对程序员的帮助,同时给培训班出身的程序员一些建议
  5. 保险箱Pro-加密保护您的照片、视频、账号、联系人、日记
  6. led点阵c语言程序,LED点阵显示数字 c语言程序 51
  7. 关于网卡特性TSO、UFO、GSO、LRO、GRO
  8. EXCEL VBA 二维表转换成一维表
  9. 嵌入式工程师必备开发工具
  10. 远程计算机怎么桌面显示不全,桌面显示不全怎么设置