比赛 |
区间问题练习 |
评测结果 |
AAAAAAAAAA |
题目名称 |
忠诚 |
最终得分 |
100 |
用户昵称 |
sxysxy |
运行时间 |
0.186 s |
代码语言 |
C++ |
内存使用 |
7.16 MiB |
提交时间 |
2017-04-21 19:48:59 |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int f[100001][18];
int main(){
freopen("faithful.in", "r", stdin);
freopen("faithful.out", "w", stdout);
int n, m; scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++)scanf("%d", &f[i][0]);
for(int k = 1; (1<<k) <= n; k++)
for(int i = 1; i+(1<<k)-1 <= n; i++)
f[i][k] = min(f[i][k-1], f[i+(1<<(k-1))][k-1]);
while(m--){
int l, r; scanf("%d %d", &l, &r);
int s = 0; while((1<<s) <= r-l+1)s++; s--;
printf("%d\n", min(f[l][s], f[r-(1<<s)+1][s]));
}
return 0;
}