3939 - 上帝造题五分钟
时间限制 : 1 秒
内存限制 : 128 MB
问题描述
第一分钟,上帝说:要有题。于是就有了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
C语言解答
#include<stdio.h> int main() { int n,Q; scanf("%d%d",&n,&Q); int a[n]; int b[Q]; int i,j,k,l,p; for(i=0;i<n;i++) scanf("%d",&a[i]); while(Q--) { scanf("%d%d",&k,&l); for(i=k;i<l;i++) for(j=k+1;j<=l;j++) { if(a[i]>a[j]) { p=a[i]; a[i]=a[j]; a[j]=p; } } printf("%d\n",a[k]); } return 0; }
C++解答
#include <iostream> using namespace std; typedef struct { int start; int end; int result; }stQuery; int findMin(int start, int end, int datas[1984]) { int i = start, min = datas[start]; while (i <= end) { if (min > datas[i]) { min = datas[i]; } i++; } return min; } int main() { int i = 0, dataNum, queryNum; int datas[1984]; stQuery querys[1988] = { 0 }; cin >> dataNum >> queryNum; while (i < dataNum) { cin >> datas[i]; i++; } i = 0; while (i < queryNum) { cin >> querys[i].start >> querys[i].end; querys[i].result = findMin(querys[i].start, querys[i].end, datas); i++; } i = 0; while (i < queryNum) { cout << querys[i].result << endl; i++; } return 0; }