View Code of Problem 134

/*#include<stdio.h>                //这种时间复杂度高了,又得先排序 
int main(){
	int n;
	int s[10000];
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i<n;i++)
		  scanf("%d",&s[i]);
		int q;    //表示输入区间的个数
		scanf("%d",&q);
		int a,b;  //区间的左右端点
		while(q--){
			scanf("%d %d",&a,&b);
			int min=a;
			for(int j=a;j<=b;j++)
			   if(s[min]>s[j])
			   min=j;
			printf("%d\n",s[min]);
		} 
	} 
} */


#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
typedef struct shuzu{
	int a;                    //表示下标 
	int b;                    //表示数值 
}shuzu;
int compare(const void *a, const void *b)
{	
    return ((shuzu *)a)->b - ((shuzu *)b)->b;//升序,判断a与b的大小并交换 
}

int main(){
		int n;
		int q;	
		int l,r;            //左右端点 
		shuzu s[100000];
		while(scanf("%d",&n)!=EOF){
				for(int i=0;i<n;i++){
				  s[i].a=i+1;            //下标从1开始	
				  scanf("%d",&s[i].b);
				  }
		  		  
		//然后对数组快速排序
		qsort(s,n,sizeof(s[0]),compare); 		  
	
	    scanf("%d",&q);
		while(q--){
		   scanf("%d %d",&l,&r);
		   for(int k=0;k<n;k++)                       //对已经从小到排序好的数组,第一个遇到符合区间要求的即为区间最小值 
		           if(s[k].a>=l&&s[k].a<=r){
		           printf("%d\n",s[k].b);
		           break;
		        }  		
           } 		
     }
}

Double click to view unformatted code.


Back to problem 134