1439. airship

1439. airship

题目描述

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

输入

第一行输入N,M 接下来一行N个整数,表示星星的体积(1<=体积<=maxlongint) 接下来M行,每行两个整数L_i,R_i,表示询问区间。

输出

输出M行,每一行表示询问区间L_i到R_i之间最大星星的体积。

样例输入

6 3
5 7 3 9 2 10
1 3
2 4
3 6

样例输出

7
9
10

数据范围限制

50%的数据满足1<=N,M<=5000

50分:
按题目暴力

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
int a[100010],l,r,n,m;
int main()
{
	fre(airship);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&l,&r);
		int maxx=0;
		for(int j=l;j<=r;j++) maxx=max(maxx,a[j]);
		printf("%d\n",maxx);
	}
	return 0;
}

100分:
我们只要将数据从大到小排一遍序,然后我们从前往后(已排好序)暴力一下它在不在范围内,输出ok了。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
struct node
{
	int a,b;
} p[100010];
int l,r,n,m;
bool cmp(node x,node y) {return x.a>y.a;}
int main()
{
	fre(airship);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&p[i].a),p[i].b=i;
	sort(p+1,p+1+n,cmp);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&l,&r);
		for(int j=1;j<=n;j++) 
			if(l<=p[j].b&&p[j].b<=r) 
			{
				printf("%d\n",p[j].a);
				break;
			}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/bigwinner888/article/details/106164533