(File IO): input:airship.in output:airship.out
時間限制: 1000 ms 空間限制: 131072 KB 具體限制
Goto ProblemSet
題目描述
年月日點分,酒泉衛星發射中心指控大廳裏,隨着指揮員一聲令下,長征二號F型火箭在夜空下點火起飛,神舟七號飛船載着翟志剛、劉伯明、景海鵬位航天員,在戈壁茫茫的深邃夜空中飛向太空,開始人類漫步太空之旅。第秒,火箭以公里/秒的速度,將飛船送到近地點公里、遠地點公里的橢圓軌道入口。
而此時,火箭的燃料也消耗殆盡,即將以悲壯的方式與飛船告別。這個過程,在短短不到分鐘時間內,翟志剛和他的兩名戰友體會到了從超重到失重的過程。 除了超重和失重的感覺之外,就是浩瀚的長空中璀璨的星星,和地面上看到的星星不同,在太空中看到的星星是成一條直線的,一共顆星星,編號爲到,每個星星有自己的體積。
由於在飛船中很無聊,除了不停地玩弄手中失重的書和筆之外沒有別的事可幹,此時翟志剛說我們來玩遊戲吧,一共玩了輪,每一輪都是給出兩個整數和,詢問第到第顆星星之間最大星星的體積,每次答對的人就可以多休息一段時間。由於翟志剛還要進行太空漫步,所以他現在請你幫忙,你得到的回報就是太空餅乾。
輸入
第一行輸入接下來一行個整數,表示星星的體積體積 接下來M行,每行兩個整數表示詢問區間。
輸出
輸出行,每一行表示詢問區間到之間最大星星的體積。
樣例輸入
6 3
5 7 3 9 2 10
1 3
2 4
3 6
樣例輸出
7
9
10
數據範圍限制
的數據滿足
解題思路
很明顯,直接暴力肯定會超時,
so,我的方法是這樣的:
- 存下每個星星的位置
- 按照星星的體積從大到小排序
- 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;
}
}
}
}