易错
超时,首先考虑将cin、cout换成scanf、printf;
其次考虑减少循环次数,这里选择提前排好序;
Description:
有一段长度为n的序列(下标从1开始),有q次询问,每次询问区间[l, r]之间的最小值。
Input:
有多组数据。
每组数据,第一行为一个n,1<=n<=100000,第二行有n个整数,表示一个序列,第三行为一个数字q,1<=q<=100000,
接下来q行,每行有两个数字l、r,1<=l <=r<=n。
Output:
对于每个询问,输出最小值在一行。
Sample Input:
5
3 1 2 4 0
2
1 2
2 5
Sample Output:
1
0
#include <iostream>
#include <algorithm>
#include "vector"
using namespace std;
class arr {
public:
int m_data;
int m_id;
};
/**
* kkmd66
* @param a1
* @param a2
* @return
*/
bool mCompare(const arr &a1, const arr &a2) {
return a1.m_data < a2.m_data;
}
/**
* kkmd66
* @return
*/
int main() {
int n;
while (scanf("%d", &n) != EOF) {
//放入
vector<arr> vector(n);
for (int i = 0; i < n; ++i) {
scanf("%d", &vector[i].m_data);
vector[i].m_id = i + 1;
}
//排序
sort(vector.begin(), vector.end(), mCompare);
int q;
scanf("%d",&q);
for (int i = 0; i < q; ++i) {
int a, b;
scanf("%d %d",&a,&b);
for (int j = 0; j < vector.size(); ++j) {
//满足条件弹出
if (vector[j].m_id >= a && vector[j].m_id <= b) {
printf("%d\n",vector[j].m_data);
break;
}
}
}
}
return 0;
}