Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 602    Accepted Submission(s): 485


Problem Description
In Land waterless, water is a very limited resource. People always fight for the biggest source of water. Given a sequence of water sources with r.
 

 

Input
First you are given an integer ) indicating the range of which you should find out the biggest water source.
 

 

Output
For each query, output an integer representing the size of the biggest water source.
 

 

Sample Input
3 1 100 1 1 1 5 1 2 3 4 5 5 1 2 1 3 2 4 3 4 3 5 3 1 999999 1 4 1 1 1 2 2 3 3 3
 

 

Sample Output
100 2 3 4 4 5 1 999999 999999 1
 

 

Source
 

 

Recommend
hujie   |   We have carefully selected several similar problems for you:  5449 5448 5447 5446 5445
区间求最大值
次裸裸的RMQ,套上模板即过
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
#define N 50005
int dpmin[N][20],dpmax[N][20];
int main()
{    
    int t;
    scanf("%d",&t);
    while(t--){
    int i, j, n, m;
    scanf("%d",&n);
    memset(dpmin,0,sizeof(dpmin));
    memset(dpmax,0,sizeof(dpmax));
    for(i=1; i<=n; i++)
    {
        scanf("%d", &dpmin[i][0]);
        dpmax[i][0]=dpmin[i][0];
    }
    int mm=floor(log(1.0*n)/log(2.0));
    for(j=1; j<=mm; j++)
        for(i=1; i<=n; i++)
        {
            if((i+(1<<(j-1)))<=n)
            {
    //            dpmin[i][j]=min(dpmin[i][j-1], dpmin[i+(1<<(j-1))][j-1]);
                dpmax[i][j]=max(dpmax[i][j-1], dpmax[i+(1<<(j-1))][j-1]);
            }
        }
    int x, y;
        
        scanf("%d",&m);
    for(int i=1; i<=m; i++)
    {
        scanf("%d%d", &x, &y);
        int  mid=floor(log(y*1.0-x+1)/log(2.0));
        int maxnum=max(dpmax[x][mid], dpmax[y-(1<<mid)+1][mid]);
    //    int minnum=min(dpmin[x][mid], dpmin[y-(1<<mid)+1][mid]);
        printf("%d\n", maxnum);
    }
    }
    return 0;
}

 

相关文章: