/*#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.