问题 N: 扶桑号战列舰

时间限制: 1 Sec  内存限制: 128 MB  Special Judge

题目描述

众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据“个舰优越主义”,建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只。
同时,扶桑号战列舰也是舰岛最为科幻的战列舰。
当然,要建造这样的舰船,科技水平是必须的。
同样众所周知的是,德意志科学技术天下第一,所以IJN的司令官从德国学来了一种先进的建船方法。
一只战舰横过来可以看做一个长度为n的序列,每个位置有一个数ai表示这个位置设计的高度。这种先进的造船技术可以每次将一个区间[l,r]内的所有位置高度都+1,求到达最终设计状态的最少操作次数。
如果你不能及时完成的话,IJN司令官会奖励你去参加苏里高海战。

输入

第一行包含一个整数n,表示序列的长度。
第二行包含n个非负整数a1,a2,a3,…,an,表示最终的状态。

输出

输出的第一行是一个正整数m,表示最少的操作次数。
接下来m行每行两个正整数li,ri,表示一次操作。
你需要保证1≤li≤ri≤n。
保证最少次数m≤105,输出可以以任意顺序输出。

样例输入

复制样例数据

6
2 3 3 3 3 3

样例输出

3
1 6
1 6
2 6

提示

这个题可以用单调栈来做,注意这里栈中是保存数的编号!从左到右依次让数列中的数与栈顶元素对应的在数列中的数值进行比较,只要前者大,就让其编号入栈(也就是按值的大小递增入栈);如果前者小于后者,这时就要保存一个区间的左右界(左界为栈顶元素的值,右界为当前数列中进行比较的数的编号-1),然后让后者-1,一直到栈顶元素对应的值等于栈中第二个元素对应的值时,让栈顶元素出栈,这样就能继续保存这个区间内下一个应该保存的子区间了;当两者相等时,则不用进行任何操作(前者不用入栈,栈中元素也不用变),然后继续访问下一个数列中的数。。。。。。

完整代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e5+5;
stack<int>t;
typedef struct internal
{int l,r;
}in;
in seq[maxn];
int a[maxn],n,m;
signed main()
{
//    ios::sync_with_stdio(false);
//    cin.tie(0);scanf("%lld",&n);for(int i=1;i<=n;i++){cin>>a[i];}t.push(0);for(int i=1;i<=n+1;i++){if(a[i]>a[t.top()]){t.push(i);}while(a[i]<a[t.top()]){seq[++m].l=t.top();seq[m].r=i-1;a[t.top()]--;int x=t.top();//保存栈顶元素t.pop();//先让栈顶元素出栈,后面再判断是否真的让其出栈if(a[x]>a[t.top()])//栈顶元素对应的值和栈中第二个元素对应的值比较{t.push(x);//如果栈顶元素大就再让其如栈(相当于没对栈顶元素进行出栈操作),这样就实现了一直到栈顶元素对应的值等于栈中第二个元素对应的值时,让栈顶元素真正出栈}}}printf("%lld\n",m);for(int i=1;i<=m;i++){printf("%lld %lld\n",seq[i].l,seq[i].r);}return 0;
}

扶桑号战列舰(单调栈)相关推荐

  1. 扶桑号战列舰【单调栈+线段树】

    扶桑号战列舰 传送门  来源upc:12800 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为当 ...

  2. 扶桑号战列舰 (单调栈+线段树区间更新懒惰标记 or 栈)

    传送门 •题目描述 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只. ...

  3. 【单调栈】 扶桑号战列舰

    问题 N: 扶桑号战列舰 时间限制: 1 Sec  内存限制: 128 MB  Special Judge 提交: 330  解决: 129 [提交] [状态] [命题人:admin] 题目描述 众所 ...

  4. (题目) (思维+栈)扶桑号战列舰

    时间限制: 1 Sec 内存限制: 128 MB 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为 ...

  5. 个人训练赛第十八场----问题 N: 扶桑号战列舰(贪心+栈)

    黑色的飞鸟掠过天空,我站在城中,看时间燃成灰烬,哗哗作响...... 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶 ...

  6. 扶桑号战列舰(差分/笛卡尔树)

    问题 N: 扶桑号战列舰 时间限制: 1 Sec  内存限制: 128 MB  Special Judge                                               ...

  7. 【upc】扶桑号战列舰 | 笛卡尔树 、 差分数组

    题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只. 同时,扶桑号战列舰 ...

  8. 问题 N: 扶桑号战列舰(笛卡尔树or差分数组)

    问题 N: 扶桑号战列舰 时间限制: 1 Sec  内存限制: 128 MB  Special Judge 提交: 169  解决: 52 [提交] [状态] [命题人:admin] 题目描述 众所周 ...

  9. POJ2796 Feel Good(单调栈)

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

最新文章

  1. echarts y轴添加点击事件_ECharts中的事件和行为
  2. 华为odc是什么意思_三星S20 FE官宣;华为Mate 40系列中国独占发售
  3. dataTables基础函数变量
  4. matlab中调用cplex 以及使用 Yalmip 工具箱
  5. v 3437 powered by ipb_奔驰V系改装订制版 目前最安全的商务车_凤凰网汽车
  6. 机器学习实战(八)预测数值型数据:回归
  7. SQL Server 相关create操作语句
  8. android java 调试快捷键_Android Studio 代码页跳界面 /java和XML快速切换技巧
  9. 手机距离传感器坏了有什么影响_适合手机兼职的工作有什么影响吗
  10. Linq to sql并发与事务
  11. html图片上传阅览并且点击放大
  12. MATLAB gui handles 未定义 及 理解
  13. STM32F103mini教程学习总结与心得(二)---->串口通信
  14. go var 一个整数_Go语言基础之基本数据类型
  15. WindowsXP打开和关闭硬盘各分区的默认共享
  16. 对 String 字符串的理解
  17. 机虚拟磁盘附加到计算机上,Hyper-V 怎样拷贝文件至虚拟硬盘并附加到虚拟机上...
  18. 数据结构(python语言描述)第一章
  19. UltraISO和rufus制作服务器U启动和下载步骤
  20. https://www.cnblogs.com/skywang12345/category/455711.html

热门文章

  1. Java毕业设计-二手书籍交易管理系统
  2. 【论文导读】 - 关于联邦图神经网络的3篇文章
  3. fastadmin_短信宝插件_验证码发送、注册、登录
  4. 在VMware Horizo​​n DaaS中的租户设备上重新初始化fdb和edb
  5. MATLAB矩阵变换--三角阵
  6. RNAseq生信分析流程简介
  7. 房产测量程序lisp_房产测绘内业数据处理方法及软件应用
  8. Repair Pipelining for Erasure-Coded Storage(ATC‘17)
  9. NOJ1076机器狗组装费用——诡异的运行时间
  10. javaweb基于SSM开发减脂训练营营员管理系统的设计与实现+论文+任务书+PPT+中期检查表