CF631C 单调栈
原题:http://codeforces.com/contest/631/problem/C
题解:m次操作,将1-ri的序列升序或降序排序,经过分析,若之后的r比之前的r大,将会覆盖掉之前的操作,若t一样,之后的r比之前的小,之后的答案就无用了。根据这样的原则,可以用单调栈处理一下m操作,保证操作的r递减,t呈交替出现,用两个指针模拟就行了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+10;
int stack[N][2],a[N],ans[N];
int n,m,top,nn;
int main(){// freopen("report.in","r",stdin);scanf("%d%d",&n,&m);top=0;for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1,t,r;i<=m;i++){scanf("%d%d",&t,&r);while(top>0 && r>=stack[top][1]){stack[top][0]=stack[top][1]=0;top--;}if(t==stack[top][0] && stack[top][1]>r)continue;stack[++top][0]=t;stack[top][1]=r;}nn=stack[1][1];sort(a+1,a+stack[1][1]+1);stack[top+1][1]=0;for(int i=1,l=1,r=nn,r1=nn;i<=top;i++){if(stack[i][0]==1){for(int j=1;j<=stack[i][1]-stack[i+1][1] && r1>=1;j++) ans[r1--]=a[r--];}else{for(int j=1;j<=stack[i][1]-stack[i+1][1] && r1>=1;j++)ans[r1--]=a[l++];}}for(int i=1;i<=stack[1][1];i++) printf("%d ",ans[i]);for(int i=stack[1][1]+1;i<=n;i++) printf("%d ",a[i]);return 0;
}
CF631C 单调栈相关推荐
- POJ2796 Feel Good(单调栈)
题意: 给出一列数据,要求一个区间内最小值与区间内数据总和乘积最大值 要点: 还是单调栈,这次我自己写的,先做了几题比较简单的果然还是有效果的,这题也是一样,按点遍历,网上大神做的是直接遍历一次即可, ...
- 【单调栈 前缀和 异或】7.21序列求和
还要再细细思考的奇妙思路 题目描述 小A最近喜欢上了关于区间max的问题.她定义一个区间的价值是max(ai)(l<=i<=r)∗(alxoral+1xor...xorar)max(ai) ...
- 栈与队列7——单调栈结构(进阶问题)
题目 一个含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{{ ...
- 栈与队列7——单调栈结构(初阶问题)
题目 一个不含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{ ...
- 单调栈 or 线段树扫描线 ---- E. Delete a Segment [单调栈+二分] [扫描线处理空白位置的技巧乘2]
题目链接 题目大意: 给出nnn个线段代表集合,现在问若可以将其中任意一个线段删除,则能够形成最多多少个独立的集合(取并集后) 解题思路1: 首先我们先对线段按照起点排序 那么我们枚举删除的线段iii ...
- 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]
题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...
- [Ahoi2013]差异[后缀数组+单调栈]
链接 解题思路:很明显前面∑1<=i<j<=nlen(Ti)+len(Tj)\sum_{1<=i<j<=n}len(T_i)+len(T_j)∑1<=i< ...
- 【每日训练】2020/11/8(规律 + 二进制、单调栈 + 前缀和,后缀和、bitset + 枚举)
整理的算法模板合集: ACM模板 目录 1. NC 打铁的箱子(规律 + 二进制) 2. NC 最优屏障(单调栈 + 前缀和,后缀和) 3. CF993C Careful Maneuvering(bi ...
- 0x11.基本数据结构 — 栈与单调栈
目录 一.栈 0.AcWing 41. 包含min函数的栈 (自己造栈) 1.AcWing 128. 编辑器 (对顶栈) 2.AcWing 129. 火车进栈 3.AcWing 130. 火车进出栈问 ...
最新文章
- Android之Junit测试类
- 安装Orchard错误
- php编程实现水仙花数,php实现水仙花数的4个示例分享
- vs2017 Visual Studio 离线安装方法
- Security+ 学习笔记55 隐私和合规性
- java动态代理和Cglib动态代理的区别和使用
- PLSQL Developer详细安装步骤
- 实战-Android开机时间优化
- c++整人小程序(附源码)
- 自适应滤波器的FPGA实现
- java万年历有农历_家庭农民历五行曰历,日历为什么叫“万年历”
- codewars 7×7 Skyscrapers 问题解决
- 程序员月薪8000,丢人吗?
- 黑杰克blackjack 游戏的简化版(第一个游戏程序)
- java工单管理系统_企业工单管理系统--使用mybatis
- Java代码实现数字签名验证
- 用什么办法可以解决失眠?
- psycopg2.pool.PoolError: connection pool exhausted
- R语言ggplot2可视化:使用ggpubr包的ggdensity函数可视化密度图、使用scale_x_continuous函数中的limits参数指定X轴数值范围
- Qt编写的复杂象棋程序 chessbroad.cpp 错误比较多
热门文章
- 蓝桥杯 奥运会开幕式
- 错误源计算机检,Voevodsky | 单一基础的源起——为避免数学错误而发展计算机验证证明的个人使命...
- 转转“战略失焦” 粗放的流量打法为何不吃香了?
- 基于FPGA的网络系统仿真分析
- 孙鑫VC++LESSON3:MFC框架程序剖析
- Android开发教程--设置ImageView图片的显示比例
- MapReduce编程概述
- 第八周读书笔记(人月神话X月亮与六便士)——到底什么才是一个程序员的自我修养?...
- BatBot智慧电力(运维)云平台
- 中国社会统计年鉴(2006-2022)