问题 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~n最低的,然后根据最小值的下标,分成两个区间,递归处理

#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1e5+6;
struct node{int l,r,minn,id;
}e[maxn<<2];
vector<pair<int,int> >ans;
int a[maxn];
void pushup(int cur){e[cur].minn = min(min(e[cur].minn,e[cur<<1|1].minn),e[cur<<1].minn);if(e[cur<<1].minn>e[cur<<1|1].minn){e[cur].id = e[cur<<1|1].id;}else{e[cur].id = e[cur<<1].id;}
}void build(int l,int r,int cur) {e[cur].l=l;e[cur].r=r;e[cur].minn = 999999999;if(l==r) {e[cur].id = l;e[cur].minn = a[l];return ;}int mid = l + r >> 1;build(l,mid,cur<<1);build(mid+1,r,cur<<1|1);pushup(cur);
}
node query(int l,int r,int cur){ if(l<=e[cur].l && e[cur].r <= r) {return e[cur];}node anss;anss.minn=999999999;int mid = e[cur].l + e[cur].r >> 1;if(l <= mid) {node temp = query(l,r,cur<<1);//cout<<anss.minn<<"   "<<temp.minn<<endl;if(anss.minn>temp.minn) anss = temp;}if(r>mid) {node temp = query(l,r,cur<<1|1);if(anss.minn>temp.minn) anss = temp;}return anss;
}void solve(int l,int r,int st){if(l>r)return;node k = query(l,r,1); for(int i=st+1;i<=k.minn;i++) {ans.pb(make_pair(l,r));}solve(l,k.id-1,k.minn);solve(k.id+1,r,k.minn);
}int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);build(1,n,1);solve(1,n,0);int cnt = ans.size();printf("%d\n",cnt);for(int i=0;i<cnt;i++) {printf("%d %d\n",ans[i].first,ans[i].second);}return 0;
}

2019年第二阶段我要变强个人训练赛第十八场 扶桑号战列舰(线段树+递归)相关推荐

  1. Contest1802 - 2019年第二阶段我要变强个人训练赛第十八场 问题 N: 扶桑号战列舰 线段树+贪心

    题目链接:http://icpc.upc.edu.cn/problem.php?cid=1802&pid=13 问题 N: 扶桑号战列舰 时间限制: 1 Sec  内存限制: 128 MB   ...

  2. 石油大 2019年第二阶段我要变强个人训练赛第十八场 Problem N 扶桑号战列舰(线段树+区间更新+区间查询)

    链接:http://icpc.upc.edu.cn/problem.php?cid=1803&pid=13 题意:给出一个n,接下来一行给出n个数.才开始所有数为0,每次操作可以选一个区间[l ...

  3. 石油大 Contest1777 - 2019年第二阶段我要变强个人训练赛第九场 I 热狗树(树形dp)

    题目描述 "我是番茄酱!" "我是黄芥末酱!" "合在一起就是--美式热狗上加的,那个!" 热狗树上的每个节点都涂有番茄酱或者黄芥末酱中的一 ...

  4. Contest1819 - 2019年我能变强组队训练赛第十一场(补题场)

    赛后总结 菜 问题 E: Faulhaber's Triangle 问题 E: Faulhaber's Triangle 单纯模拟题,模拟分数加法 代码 #include <bits/stdc+ ...

  5. Contest1819 - 2019年我能变强组队训练赛第十一场

    题目: The King's Ups and Downs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  6. 吉首大学2019年程序设计竞赛(重现赛) 干物妹小埋(线段树求最长上升子序列)

    链接:https://ac.nowcoder.com/acm/contest/992/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  7. 2019年度中国电池行业百强榜发布;宇通客车签下海外最大纯电动客车订单 | 美通企业日报...

    今日看点:2019年度中国电池行业百强榜发布.宇通客车签下海外最大纯电动客车订单.李锦记酱料集团委任林碧宝女士为行政总裁.万豪拓展中国东南区,温州首家万豪酒店开业.Envirotainer公司宣布中文 ...

  8. 【只有光头才能变强,文末有xx】分享一波Lambda表达式

    戳蓝字"CSDN云计算"关注我们哦! 作者 |  Java3y 责编 | 阿秃 前言 只有光头才能变强. 学了一下Java的函数式编程,给大家整理了一下,一起学习! 一.Lambd ...

  9. 梁宁:真正驱动你变强的,是痛苦

    思维方式 如何成为一个优秀的人? 我认为,想要变得更优秀,你需要学会"不满足".简单来说,就是对自己的现状不满足,不改变就会异常痛苦. 优秀需要努力,而努力是不舒服的事情,长期持续 ...

最新文章

  1. 十行Python代码搞定图片中的物体检测
  2. C++中的hash_map和map的区别
  3. taskkill无法终止进程 拒绝访问_进程的基本概念
  4. windows下生成github ssh key详解
  5. mysqli 返回一条结果_php中mysqli 处理查询结果集总结
  6. 【Linux系统编程】Linux 进程调度浅析
  7. 如何下载linux历史版本下载,CentOS历史版本下载方法
  8. PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解...
  9. 带文件卖面,老坛酸菜面重回超市货架!你会买账吗?京东、淘宝依然屏蔽
  10. 为什么 Netflix 这么强?网飞 CEO 哈斯廷斯跟陆奇摊牌了
  11. Intellij IDEA 2016 使用
  12. jenkins+phantomjs环境搭建及使用
  13. 外卖侠小程序源码v4.24.0微擎插件外卖cps同城生活团购
  14. 几种常见的文献管理软件
  15. linux ftps ftp,linux ftps ftp-over-ssl 配置实验
  16. python绘制散点图和折线图_Python散点图与折线图绘制过程解析
  17. SQL省市区三级表 脚本
  18. 2021 年 15 款适用于 PC 和 Mac 的最佳 Android 模拟器
  19. 保险费率软件测试题目,软件测试保险等价类法测试用例
  20. (转)魔兽世界里所有钥匙的搜集或制作方法

热门文章

  1. 1.31.Flink自定义rocketmq(source/sink)+自定义redis source和sink
  2. P6软件如何进度纠偏
  3. Java、JSP电影订票网站的设计与开发
  4. 让 Apache Shiro 保护你的应用
  5. 网站服务器 加密狗,致远软件自助服务网站
  6. 建立第一个Power Apps程序(新手版)
  7. 人工智能往哪个方向发展有前途?计算机视觉还是自然语言处理?
  8. PSO粒子群优化-LSTM-pyswarms框架-实现期货价格预测
  9. 2019北京培训:MySQLday1
  10. Bentley版隧道