比赛 区间问题练习 评测结果 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;
}