原题: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 单调栈相关推荐

  1. POJ2796 Feel Good(单调栈)

    题意: 给出一列数据,要求一个区间内最小值与区间内数据总和乘积最大值 要点: 还是单调栈,这次我自己写的,先做了几题比较简单的果然还是有效果的,这题也是一样,按点遍历,网上大神做的是直接遍历一次即可, ...

  2. 【单调栈 前缀和 异或】7.21序列求和

    还要再细细思考的奇妙思路 题目描述 小A最近喜欢上了关于区间max的问题.她定义一个区间的价值是max(ai)(l<=i<=r)∗(alxoral+1xor...xorar)max(ai) ...

  3. 栈与队列7——单调栈结构(进阶问题)

    题目 一个含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{{ ...

  4. 栈与队列7——单调栈结构(初阶问题)

    题目 一个不含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{ ...

  5. 单调栈 or 线段树扫描线 ---- E. Delete a Segment [单调栈+二分] [扫描线处理空白位置的技巧乘2]

    题目链接 题目大意: 给出nnn个线段代表集合,现在问若可以将其中任意一个线段删除,则能够形成最多多少个独立的集合(取并集后) 解题思路1: 首先我们先对线段按照起点排序 那么我们枚举删除的线段iii ...

  6. 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]

    题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...

  7. [Ahoi2013]差异[后缀数组+单调栈]

    链接 解题思路:很明显前面∑1<=i<j<=nlen(Ti)+len(Tj)\sum_{1<=i<j<=n}len(T_i)+len(T_j)∑1<=i< ...

  8. 【每日训练】2020/11/8(规律 + 二进制、单调栈 + 前缀和,后缀和、bitset + 枚举)

    整理的算法模板合集: ACM模板 目录 1. NC 打铁的箱子(规律 + 二进制) 2. NC 最优屏障(单调栈 + 前缀和,后缀和) 3. CF993C Careful Maneuvering(bi ...

  9. 0x11.基本数据结构 — 栈与单调栈

    目录 一.栈 0.AcWing 41. 包含min函数的栈 (自己造栈) 1.AcWing 128. 编辑器 (对顶栈) 2.AcWing 129. 火车进栈 3.AcWing 130. 火车进出栈问 ...

最新文章

  1. Android之Junit测试类
  2. 安装Orchard错误
  3. php编程实现水仙花数,php实现水仙花数的4个示例分享
  4. vs2017 Visual Studio 离线安装方法
  5. Security+ 学习笔记55 隐私和合规性
  6. java动态代理和Cglib动态代理的区别和使用
  7. PLSQL Developer详细安装步骤
  8. 实战-Android开机时间优化
  9. c++整人小程序(附源码)
  10. 自适应滤波器的FPGA实现
  11. java万年历有农历_家庭农民历五行曰历,日历为什么叫“万年历”
  12. codewars 7×7 Skyscrapers 问题解决
  13. 程序员月薪8000,丢人吗?
  14. 黑杰克blackjack 游戏的简化版(第一个游戏程序)
  15. java工单管理系统_企业工单管理系统--使用mybatis
  16. Java代码实现数字签名验证
  17. 用什么办法可以解决失眠?
  18. psycopg2.pool.PoolError: connection pool exhausted
  19. R语言ggplot2可视化:使用ggpubr包的ggdensity函数可视化密度图、使用scale_x_continuous函数中的limits参数指定X轴数值范围
  20. Qt编写的复杂象棋程序 chessbroad.cpp 错误比较多

热门文章

  1. 蓝桥杯 奥运会开幕式
  2. 错误源计算机检,Voevodsky | 单一基础的源起——为避免数学错误而发展计算机验证证明的个人使命...
  3. 转转“战略失焦” 粗放的流量打法为何不吃香了?
  4. 基于FPGA的网络系统仿真分析
  5. 孙鑫VC++LESSON3:MFC框架程序剖析
  6. Android开发教程--设置ImageView图片的显示比例
  7. MapReduce编程概述
  8. 第八周读书笔记(人月神话X月亮与六便士)——到底什么才是一个程序员的自我修养?...
  9. BatBot智慧电力(运维)云平台
  10. 中国社会统计年鉴(2006-2022)