• rmq RMQ


    http://blog.csdn.net/cnyali/article/details/52228846

    1. #include <iostream>  
    2. #include <cmath>  
    3. #define maxn 10005  
    4. using namespace std;  
    5. int maxsum[maxn][20], minsum[maxn][20];  
    6.   
    7. void RMQ(int num)    //预处理->O(nlogn)    
    8. {  
    9.     int i, j;  
    10.     for(j = 1; j < 20; ++j)  
    11.       for(i = 1; i <= num; ++i)  
    12.       if(i + (1 << j) -1 <= num)  
    13.       {  
    14.           maxsum[i][j] = max(maxsum[i][j-1], maxsum[i+(1 << j)][j-1]);  
    15.           minsum[i][j] = min(minsum[i][j-1], minsum[i+(1 << j)][j-1]);  
    16.         }  
    17. }  
    18.   
    19. int main()  
    20. {  
    21.     int i, j, num, t, query;  
    22.     cin >> t;  
    23.     while(t--)  
    24.     {  
    25.         cin >> num >> query;  
    26.         for(i = 0; i < num; i++)  
    27.         {  
    28.             cin >> maxsum[i][0];  
    29.             minsum[i][0] = maxsum[i][0];  
    30.         }  
    31.         RMQ(num);  
    32.         int start, end, maxl, minl;  
    33.         while(query--) //o(1) 查询   
    34.         {  
    35.             cin >> start >> end;  
    36.             int k = (int)((log(end-start+1))/log(2.0));  
    37.             maxl = max(maxsum[start][k], maxsum[end-(1 << k)+1][k]);  
    38.             minl = min(minsum[start][k], minsum[end-(1 << k)+1][k]);  
    39.             cout << maxl << minl << endl;  
    40.         }  
    41.     }  
    42.     return 0;  
    43. }  

     

  • 相关阅读:
    电子电路基础复习 —— 电阻
    Linux 网络编程(IO模型)
    Linux 2.6 源码学习-内存管理-buddy算法
    【转】MySQL性能优化的21个最佳实践
    linux 2.6 驱动笔记(三)
    linux 2.6 驱动笔记(二)
    公共代码参考(httpclient)
    linux 2.6 驱动笔记(一)
    bzoj 2401: 陶陶的难题I 数论
    bzoj 3144: [Hnoi2013]切糕 最小割
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6883128.html
Copyright © 2020-2023  润新知