(紀中)1439. airship

(File IO): input:airship.in output:airship.out
時間限制: 1000 ms 空間限制: 131072 KB 具體限制
Goto ProblemSet


題目描述
2008200899252521211010分,酒泉衛星發射中心指控大廳裏,隨着指揮員一聲令下,長征二號F型火箭在夜空下點火起飛,神舟七號飛船載着翟志剛、劉伯明、景海鵬33位航天員,在戈壁茫茫的深邃夜空中飛向太空,開始人類漫步太空之旅。第583583秒,火箭以7.57.5公里/秒的速度,將飛船送到近地點200200公里、遠地點350350公里的橢圓軌道入口。
而此時,火箭的燃料也消耗殆盡,即將以悲壯的方式與飛船告別。這個過程,在短短不到1010分鐘時間內,翟志剛和他的兩名戰友體會到了從超重到失重的過程。 除了超重和失重的感覺之外,就是浩瀚的長空中璀璨的星星,和地面上看到的星星不同,在太空中看到的星星是成一條直線的,一共N(1<=N<=100,000)N(1<=N<=100,000)顆星星,編號爲11NN,每個星星有自己的體積。
由於在飛船中很無聊,除了不停地玩弄手中失重的書和筆之外沒有別的事可幹,此時翟志剛說我們來玩遊戲吧,一共玩了MM(1<=M<=100,000)(1<=M<=100,000),每一輪都是給出兩個整數LLR(1<=L<=R<=N)R(1<=L<=R<=N),詢問第LL到第RR顆星星之間最大星星的體積,每次答對的人就可以多休息一段時間。由於翟志剛還要進行太空漫步,所以他現在請你幫忙,你得到的回報就是太空餅乾。


輸入
第一行輸入N,MN,M接下來一行NN個整數,表示星星的體積(1<=(1<=體積<=maxlongint)<=maxlongint) 接下來M行,每行兩個整數Li,Ri,L_i,R_i,表示詢問區間。

輸出
輸出MM行,每一行表示詢問區間LiL_iRiR_i之間最大星星的體積。


樣例輸入
6 3
5 7 3 9 2 10
1 3
2 4
3 6

樣例輸出
7
9
10


數據範圍限制
5050%的數據滿足1<=N,M<=50001<=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;
			}
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章