CF1132G Greedy Subsequences
题目链接:洛谷
题目大意:对于一个长度为$n$的序列$a_i$,它的最长贪心严格上升子序列定义为(1)最长上升子序列(2)对于这个子序列,每个数的后继必须是在原序列中它右边第一个比它大的数。求所有长度为$k$的子区间中,它的最长贪心严格上升子序列的长度。
数据范围:$1\leq k\leq n\leq 10^6,1\leq a_i\leq n$
我们注意到每个数的后继是唯一的,所以可以在数列后面加上一个$n+1$,然后它就是一个树结构。
然后直接用一个单调栈就可以建出来这棵树了。
那么这个最长贪心严格上升子序列的长度就是这个树上的最长链(只能从儿子到父亲)
如果在这个子区间内增加一个$a[x]$,那就是以$x$这个点的子树内的点为起点的最长贪心严格上升子序列都加上1,删除就是减去1。
就用一个线段树维护区间加,区间$\max$就可以了。
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include<bits/stdc++.h> 2 #define Rint register int 3 using namespace std; 4 const int N = 1000003; 5 int n, k, p[N], stk[N], top, head[N], to[N], nxt[N], dfn[N], siz[N], tim; 6 inline void add(int a, int b){ 7 static int cnt = 0; 8 to[++ cnt] = b; nxt[cnt] = head[a]; head[a] = cnt; 9 } 10 inline void dfs(int x){ 11 dfn[x] = ++ tim; siz[x] = 1; 12 for(Rint i = head[x];i;i = nxt[i]) dfs(to[i]), siz[x] += siz[to[i]]; 13 } 14 int seg[N << 2], lazy[N << 2]; 15 inline void pushdown(int x){ 16 if(lazy[x]){ 17 seg[x << 1] += lazy[x]; 18 seg[x << 1 | 1] += lazy[x]; 19 lazy[x << 1] += lazy[x]; 20 lazy[x << 1 | 1] += lazy[x]; 21 lazy[x] = 0; 22 } 23 } 24 inline void pushup(int x){seg[x] = max(seg[x << 1], seg[x << 1 | 1]);} 25 inline void change(int x, int L, int R, int l, int r, int v){ 26 if(l <= L && R <= r){ 27 seg[x] += v; lazy[x] += v; 28 return; 29 } 30 int mid = L + R >> 1; 31 pushdown(x); 32 if(l <= mid) change(x << 1, L, mid, l, r, v); 33 if(mid < r) change(x << 1 | 1, mid + 1, R, l, r, v); 34 pushup(x); 35 } 36 int main(){ 37 scanf("%d%d", &n, &k); 38 for(Rint i = 1;i <= n;i ++) scanf("%d", p + i); 39 for(Rint i = 1;i <= n;i ++){ 40 while(top && p[stk[top]] < p[i]){ 41 add(i, stk[top]); -- top; 42 } 43 stk[++ top] = i; 44 } 45 while(top) add(n + 1, stk[top]), -- top; 46 dfs(n + 1); 47 for(Rint i = 1;i <= k;i ++) change(1, 1, n + 1, dfn[i], dfn[i] + siz[i] - 1, 1); 48 printf("%d", seg[1]); 49 for(Rint i = k + 1;i <= n;i ++){ 50 change(1, 1, n + 1, dfn[i], dfn[i] + siz[i] - 1, 1); 51 change(1, 1, n + 1, dfn[i - k], dfn[i - k] + siz[i - k] - 1, -1); 52 printf(" %d", seg[1]); 53 } 54 }
View Code
转载于:https://www.cnblogs.com/AThousandMoons/p/10624072.html
CF1132G Greedy Subsequences相关推荐
- [Codeforces1132G]Greedy Subsequences——线段树+单调栈
题目链接: Codeforces1132G 题目大意:给定一个序列$a$,定义它的最长贪心严格上升子序列为$b$满足若$a_{i}$在$b$中则$a_{i}$之后第一个比它大的也在$b$中.给出一个数 ...
- 退役前的做题记录5.0
退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树 ...
- Codeforces 刷题记录(已停更)
Codeforces 每日刷题记录 (已停更) 打'+'是一些有启发意义的题目,部分附上一句话题解,每日更新3题,大部分题目较水. Day ID Problem Tutorial Note 1 1 + ...
- 【Educational Codeforces Round 61 (Rated for Div. 2)】A.B.C.D.E.F.G
前言 这场在最开始很顺利,A题6min1A,B题14min1A,但是由于C题过题人数太少一度认为这个C题很难,等有人过了才开始写最开始的想法,C题40min1A,过C之后发现F过的很多,去看提,发现和 ...
- LeetCode:115. Distinct Subsequences
题目 Given a string S and a string T, count the number of distinct subsequences of S which equals T. A ...
- Distinct Subsequences@LeetCode
Distinct Subsequences 动态规划题.先用二维动态规划的思路解释下:设match是动态规划表,其中match[i][j]表示S.substring(0, i)对T.substring ...
- Arithmetic_Thinking -- greedy algorithm
贪心算法--就是一种寻找局部最优解的情况,然后整合成整体最优解的情况 简单的例子:买菜的找钱,现在有1元,5角,1角的硬币,要找给别人2元7角,现在是怎么才能以最少的硬币量找给别人,肯定是先来两个1元 ...
- 数据结构与算法(C++)– 贪婪算法(Greedy algorithm)
贪婪算法(Greedy algorithm) 1.基础 定义:贪婪算法分阶段地工作,在每一阶段,选择在当前最好的决策,不考虑将来的后果.所以一般只能得到局部最优而不是全局最优. 贪婪算法: Dijks ...
- leetcode 115. Distinct Subsequences Hard | 115. 不同的子序列(动态规划)
题目 https://leetcode.com/problems/distinct-subsequences/ 题解 方法1:递归(超时) 这种解法比较容易理解,时间复杂度没算出来,但肯定不是 O(m ...
- HDOJ 2227 HDU 2227 Find the nondecreasing subsequences ACM 2227 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2227 题目描述: ...
最新文章
- 【科普】大脑是如何编码复杂信息的?
- 8.1 matlab图形窗口与坐标轴(图形对象的句柄和属性、坐标轴的操作、图形窗口的操作)
- MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
- MongoDB 优化器profile
- python模块版本管理工具_【转】Python包管理工具
- 5 SD配置-企业结构-定义-定义销售组
- 计算机二级换c语言,09年计算机二级C语言辅导:C技巧(内存分配:更换策略,不要为难内存)...
- winform 调用外部程序和多线程
- mysql 唯一索引_面试官:谈谈你对mysql索引的认识?
- 1.React学习笔记----基础模板创建+远程仓库建立
- java正则获取内容_Java利用正则表达式提取数据的方法
- 文件过滤器FileFilter
- 浪潮服务器安装ESXI6.7 无raid驱动解决方案
- 【Django】Django视图views详解
- 处暑(Limit of Heat )节到了,应了解的生活常识
- 【JCC技术】JCC功能演示
- An Apple a day keeps the doctor away
- 有机酸膜分离之柠檬酸生产应用反渗透技术
- win10多用户同时远程桌面登陆(允许多个RDP会话)-支持win10最新1909版2004版
- 音频播放、录音、视频播放、拍照、视频录制
热门文章
- 一个文件版的名片管理系统(Python3)
- 使用kubeadm安装部署k8s
- 怎么将高版本DWG格式图纸转换成低版本的DXF格式?
- 故事 - 100℃的人生
- 程序员应该做的事(转自CSDN)
- Mac OS X 安装protobuf
- python中安装decimal模块_第38天:Python decimal 模块
- php获取远程文件夹下的文件是否存在,PHP判断远程文件是否存在函数
- python扩展库简介_NumPy简介-Python扩展程序库 -- NumPy-编程文章分享
- html中展开的小箭头,HTML5 移动网页应用中的展开式标签(带上下指示箭头)