C語言實現 藍橋杯 算法提高 上帝造題五分鐘

試題 算法提高 上帝造題五分鐘

                                                                                  藍橋杯試題解答彙總鏈接

資源限制

       時間限制:1.0s 內存限制:256.0MB


問題描述

       第一分鐘,上帝說:要有題。於是就有了L,Y,M,C
  第二分鐘,LYC說:要有向量。於是就有了長度爲n寫滿隨機整數的向量
  第三分鐘,YUHCH說:要有查詢。於是就有了Q個查詢,查詢向量的一段區間內元素的最小值
  第四分鐘,MZC說:要有限。於是就有了數據範圍
  第五分鐘,CS說:要有做題的。說完衆神一鬨而散,留你來收拾此題


輸入格式

       第一行兩個正整數n和Q,表示向量長度和查詢個數
  接下來一行n個整數,依次對應向量中元素:a[0],a[1],…,a[n-1]
  接下來Q行,每行兩個正整數lo,hi,表示查詢區間[lo, hi]中的最小值,即min(a[lo],a[lo+1],…,a[hi])。


輸出格式

       共Q行,依次對應每個查詢的結果,即向量在對應查詢區間中的最小值。


樣例輸入

7 4
1 -1 -4 8 1 2 -7
0 0
1 3
4 5
0 6

樣例輸出

1
-4
1
7

樣例說明

第一個查詢[0,0]表示求min{a[0]}=min{1}=1
第二個查詢[1,3]表示求min{a[1],a[2],a[3]}=min{-1,-4,8}=-4
第三個查詢[4,5]表示求min{a[4],a[5]}=min{1,2}=1
第四個查詢[0,6]表示查詢整個向量,求min{a[0..6]}=min{1,-1,-4,8,1,2,-7}=-7

數據規模與約定

1<=n<=1984,1<=Q<=1988,向量中隨機整數的絕對值不超過1,000

代碼

#include<stdio.h>
int min(int x,int y){//求最小值函數 
	if(x>y){
		return y;
	}
	return x;
}
int main(){
	int n,q;
	scanf("%d%d",&n,&q);
	int a[n],i,j,b[q][2];
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(i=0;i<q;i++){
		scanf("%d%d",&b[i][0],&b[i][1]);
	}
	for(i=0;i<q;i++){
		if(b[i][0]==b[i][1]){//只有一個數直接輸出 
			printf("%d\n",a[b[i][1]]);
		}
		else{
			int t=min(a[b[i][0]],a[b[i][0]+1]);//先初始化t的值 
			for(j=b[i][0]+2;j<=b[i][1];j++){
				t=min(t,a[j]);//每次比較取最小 
			}
			printf("%d\n",t);
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章