(纪中)1439. airship

57 篇文章 0 订阅

(File IO): input:airship.in output:airship.out
时间限制: 1000 ms 空间限制: 131072 KB 具体限制
Goto ProblemSet


题目描述
2008 2008 2008 9 9 9 25 25 25 21 21 21 10 10 10分,酒泉卫星发射中心指控大厅里,随着指挥员一声令下,长征二号F型火箭在夜空下点火起飞,神舟七号飞船载着翟志刚、刘伯明、景海鹏 3 3 3位航天员,在戈壁茫茫的深邃夜空中飞向太空,开始人类漫步太空之旅。第 583 583 583秒,火箭以 7.5 7.5 7.5公里/秒的速度,将飞船送到近地点 200 200 200公里、远地点 350 350 350公里的椭圆轨道入口。
而此时,火箭的燃料也消耗殆尽,即将以悲壮的方式与飞船告别。这个过程,在短短不到 10 10 10分钟时间内,翟志刚和他的两名战友体会到了从超重到失重的过程。 除了超重和失重的感觉之外,就是浩瀚的长空中璀璨的星星,和地面上看到的星星不同,在太空中看到的星星是成一条直线的,一共 N ( 1 < = N < = 100 , 000 ) N(1<=N<=100,000) N(1<=N<=100,000)颗星星,编号为 1 1 1 N N N,每个星星有自己的体积。
由于在飞船中很无聊,除了不停地玩弄手中失重的书和笔之外没有别的事可干,此时翟志刚说我们来玩游戏吧,一共玩了 M M M ( 1 < = M < = 100 , 000 ) (1<=M<=100,000) (1<=M<=100,000),每一轮都是给出两个整数 L L L R ( 1 < = L < = R < = N ) R(1<=L<=R<=N) R(1<=L<=R<=N),询问第 L L L到第 R R R颗星星之间最大星星的体积,每次答对的人就可以多休息一段时间。由于翟志刚还要进行太空漫步,所以他现在请你帮忙,你得到的回报就是太空饼干。


输入
第一行输入 N , M N,M N,M接下来一行 N N N个整数,表示星星的体积 ( 1 < = (1<= (1<=体积 < = m a x l o n g i n t ) <=maxlongint) <=maxlongint) 接下来M行,每行两个整数 L i , R i , L_i,R_i, Li,Ri,表示询问区间。

输出
输出 M M M行,每一行表示询问区间 L i L_i Li R i R_i Ri之间最大星星的体积。


样例输入
6 3
5 7 3 9 2 10
1 3
2 4
3 6

样例输出
7
9
10


数据范围限制
50 50% 50的数据满足 1 < = N , M < = 5000 1<=N,M<=5000 1<=N,M<=5000


解题思路
很明显,直接暴力肯定会超时,
so,我的方法是这样的:

  1. 存下每个星星的位置
  2. 按照星星的体积从大到小排序
  3. 1~n枚举星星,若位置符合区间就输出星星体积。

代码

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<map>
using namespace std;
int n,m,l,r,maxn;
struct c {
	int x,y;
}a[100010];
bool cmp(const c&l,const c&r)
{
	return l.x>r.x;
}
int main() {
	freopen("airship.in","r",stdin);
	freopen("airship.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n; i++) {
		scanf("%d",&a[i].x);
		a[i].y=i;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1; i<=m; i++) {
		scanf("%d%d",&l,&r);
		for(int j=1; j<=n; j++) {
			if(a[j].y>=l&&a[j].y<=r) {
				printf("%d\n",a[j].x);
				break;
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值