luogu4093 序列 (cdq分治优化dp)
设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)相关推荐
- [BZOJ4553][TJOI2016HEOI2016]序列(CDQ分治)
4553: [Tjoi2016&Heoi2016]序列 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1202 Solved: 554 [ ...
- CF868F 分治优化dp
链接:https://codeforces.com/problemset/problem/868/F 首先n^2m的dp很容易想,f(j,i)表示考虑划分了j个集合,最后一个集合结尾在i的最小值.显然 ...
- [CF1442 D] Sum(分治优化dp + 结论)
CF1442D Sum problem solution code problem luogu翻译 solution 部分分做法,预处理每组前缀和,暴力背包 dpdpdp 转移:dpi,j=max{ ...
- 三维偏序/cdq分治/
三维偏序---cdq分治 cdq分治概述 二维偏序概述 二维偏序例题分析 三维偏序概述 例题分析 cdq分治概述 前置知识:(如果不懂要先去了解分治) > 分治: > 分而治之,将原问题不 ...
- BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)
BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化) 1 #include<algorithm> 2 #include<iostream> 3 #include ...
- BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]
传送门 题意:不想写... 扔链接就跑 好吧我回来了 首先发现每次兑换一定是全部兑换,因为你兑换说明有利可图,是为了后面的某一天两种卷的汇率差别明显而兑换 那么一定拿全利啊,一定比多天的组合好 $f[ ...
- NOI2007 货币兑换 - CDQ分治斜率优化dp
斜率优化dp维护一个凸壳.如果\(x, y\)坐标都递增,可以用单调队列,如果只有\(x\)递增,可以在凸壳上二分斜率,如果\(x, y\)都不递增,则需要在凸包中插入,可以用平衡树或cdq分治维护. ...
- bzoj1492 货币兑换cash dp斜率优化+splay/cdq分治
斜率优化 首先,由于如果在i天买在j天卖有利可图,那么最优方法就是在i天花完钱在j天卖完.我们令 f i f_i fi为第i天可以得到的最多钱数,然后可以先列方程求出花完钱在第j天得到的两种金券数 ...
- 【BZOJ1492】[NOI2007]货币兑换Cash 斜率优化+cdq分治
[BZOJ10492][NOI2007]货币兑换Cash Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下简称B券).每 ...
- 【牛客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) ...
最新文章
- mycat mysql 主从切换_Mycat读写分离与主从切换
- python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别
- MySQL基本架构图
- linux 查询oracle情况,在Linux下使用SQLPlus查看Oracle数据库表空间及使用率
- [大数据行业应用发展前景分析] 阿里潘永花报告:大数据产业将成为新的煤和石油介绍...
- Linux文件中开始处的feff,行末的^M
- java scene_Java Scene類代碼示例
- poj 3071 Football 概率dp
- Hadoop之crontab与ntpd
- vue插件开发练习--实用弹窗
- MFC windows程序设计(第三版)课后习题第一章
- 串口485接法图_rs485 与485通讯 接线方法?
- linux查看cpu架构命令,linux查看cpu型号命令
- 阿里云mysql导出表_mysql导出数据库表
- C++扫描指定主机开放的端口
- win10 下 pdfium编译 VS2017
- 使用CubeMX生成工程时Debug模式为No Debug与Serial Wire的代码差异
- 05快速排序(不稳定)
- GJB-150三防试验机构,国军标试验机构
- 2020起重机司机(限桥式起重机)模拟考试系统及起重机司机(限桥式起重机)考试试题
热门文章
- Gym - 101808K Another Shortest Path Problem (Damascus University Collegiate)【并查集+LCA】
- elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
- 网易严选小程序 ( 前端 ):mpvue-shop
- 从面试官的角度聊聊培训班对程序员的帮助,同时给培训班出身的程序员一些建议
- 保险箱Pro-加密保护您的照片、视频、账号、联系人、日记
- led点阵c语言程序,LED点阵显示数字 c语言程序 51
- 关于网卡特性TSO、UFO、GSO、LRO、GRO
- EXCEL VBA 二维表转换成一维表
- 嵌入式工程师必备开发工具
- 远程计算机怎么桌面显示不全,桌面显示不全怎么设置