nyoj119

来源:互联网 发布:eve捏脸数据男 编辑:程序博客网 时间:2024/06/09 21:06
#include<cstdio>  #include<algorithm>  #include<cmath>  using namespace std;    const int N = 100010;  int maxsum[N][20], minsum[N][20];    void RMQ(int num) //预处理->O(nlogn)  {      for(int j = 1; j < 20; ++j)          for(int i = 1; i <= num; ++i)              if(i + (1 << j) - 1 <= num)              {                  maxsum[i][j] = max(maxsum[i][j - 1], maxsum[i + (1 << (j - 1))][j - 1]);                  minsum[i][j] = min(minsum[i][j - 1], minsum[i + (1 << (j - 1))][j - 1]);              }  }    int main()  {      int num, query;      int src, des;      scanf("%d %d", &num, &query);          for(int i = 1; i <= num; ++i) //输入信息处理          {              scanf("%d", &maxsum[i][0]);              minsum[i][0] = maxsum[i][0];          }          RMQ(num);          while(query--) //O(1)查询          {              scanf("%d %d", &src, &des);              int k = (int)(log(des - src + 1.0) / log(2.0));              int maxres = max(maxsum[src][k], maxsum[des - (1 << k) + 1][k]);              int minres = min(minsum[src][k], minsum[des - (1 << k) + 1][k]);              printf("%d\n", maxres - minres);          }      return 0;  }

0 0
原创粉丝点击