扶桑号战列舰【RMQ+分治】
扶桑号战列舰
时间限制: 1 Sec 内存限制: 128 MB Special Judge
提交: 197 解决: 63
[提交] [状态] [命题人:admin]
题目描述
众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据“个舰优越主义”,建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只。
同时,扶桑号战列舰也是舰岛最为科幻的战列舰。
当然,要建造这样的舰船,科技水平是必须的。
同样众所周知的是,德意志科学技术天下第一,所以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
提示
解题思路:
通过RMQ维护区间最小值,然后在分治即可。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
typedef pair<int,int> p;
p dp[100100][25];
int arr[100100];
pair<int,int> res[100100];
void RMQ(int n) {for(int i=1;i<=n;i++) {dp[i][0].second=arr[i];dp[i][0].first=i;}for(int k=1;k<=(int)log2(n);k++) {for(int i=1;i+(1<<k)-1<=n;i++) {if(dp[i][k-1].second<=dp[i+(1<<(k-1))][k-1].second) {dp[i][k].second=dp[i][k-1].second;dp[i][k].first=dp[i][k-1].first;}else {dp[i][k].second=dp[i+(1<<(k-1))][k-1].second;dp[i][k].first=dp[i+(1<<(k-1))][k-1].first;}}}
}
p find(int l,int r) {int k=(int)log2(r-l+1);if(dp[l][k].second<=dp[r+1-(1<<k)][k].second) return dp[l][k];else return dp[r+1-(1<<k)][k];
}
int cnt;
void fenzhi(int l,int r,int num) {if(l>r) return;p nape=find(l,r);int t=nape.second;int mid=nape.first;for(int k=num+1;k<=t;k++) {cnt++;res[cnt].first=l;res[cnt].second=r;}fenzhi(l,mid-1,t);fenzhi(mid+1,r,t);
}
int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);//ios::sync_with_stdio(0),cin.tie(0);int n;scanf("%d",&n);rep(i,1,n) {scanf("%d",&arr[i]);}RMQ(n);fenzhi(1,n,0);printf("%d\n",cnt);for(int i=1;i<=cnt;i++) {printf("%d %d\n",res[i].first,res[i].second);}return 0;
}
扶桑号战列舰【RMQ+分治】相关推荐
- 【单调栈】 扶桑号战列舰
问题 N: 扶桑号战列舰 时间限制: 1 Sec 内存限制: 128 MB Special Judge 提交: 330 解决: 129 [提交] [状态] [命题人:admin] 题目描述 众所 ...
- 扶桑号战列舰(单调栈)
问题 N: 扶桑号战列舰 时间限制: 1 Sec 内存限制: 128 MB Special Judge 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据&quo ...
- 扶桑号战列舰【单调栈+线段树】
扶桑号战列舰 传送门 来源upc:12800 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为当 ...
- (题目) (思维+栈)扶桑号战列舰
时间限制: 1 Sec 内存限制: 128 MB 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为 ...
- 扶桑号战列舰(差分/笛卡尔树)
问题 N: 扶桑号战列舰 时间限制: 1 Sec 内存限制: 128 MB Special Judge ...
- 【upc】扶桑号战列舰 | 笛卡尔树 、 差分数组
题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只. 同时,扶桑号战列舰 ...
- 问题 N: 扶桑号战列舰(笛卡尔树or差分数组)
问题 N: 扶桑号战列舰 时间限制: 1 Sec 内存限制: 128 MB Special Judge 提交: 169 解决: 52 [提交] [状态] [命题人:admin] 题目描述 众所周 ...
- 扶桑号战列舰 (单调栈+线段树区间更新懒惰标记 or 栈)
传送门 •题目描述 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶桑级战列舰,完工时为当时世界上武装最为强大的舰只. ...
- 个人训练赛第十八场----问题 N: 扶桑号战列舰(贪心+栈)
黑色的飞鸟掠过天空,我站在城中,看时间燃成灰烬,哗哗作响...... 题目描述 众所周知,一战过后,在世界列强建造超无畏级战列舰的竞争之中,旧日本海军根据"个舰优越主义",建造了扶 ...
最新文章
- 系统计算机大小怎么更改,调整设置电脑图标大小的方法
- aws java mysql_AWS Serverless部署java api(RDS for MySQL篇)
- 推荐 7 个学习 TypeScript 的宝库,2021 是时候给自己加薪了!
- bind9 安装:部署自建dns系统
- Serilog 日志框架如何自动删除超过 N 天的日志 ?
- 关于零拷贝技术,你了解多少?
- PAT乙级1025反转链表 25(分)
- [Java]jvm参数选项中文文档
- 大数据-实时推荐系统最主流推荐系统itemCF和userCF视频教程下载
- 05. 对定制的类型转换函数保持警觉
- 数据结构c语言版算法知识点,2020考研计算机《数据结构(C语言版)》复习笔记(3)...
- 面试常见问题及回答技巧
- win10 nginx设置开机启动 --亲测有效
- error C2143: 语法错误 : 缺少“;”(在“template”的前面)
- xfs文件系统修复问题
- C++游戏---皇后PK
- Tableau仪表板搭建
- 贷款违约行为的ANOVA分析——关于不同抽样方法得到不同结论的分析
- excel制作跨职能流程图_轻松做Visio跨职能流程图(泳道图)
- Reso | Noise 网易云音乐插件