hdu 5443 The Water Problem 2015 ACM/ICPC Asia Regional Changchun Online

来源:互联网 发布:柏拉图表软件 编辑:程序博客网 时间:2024/05/18 02:04

RMQ模板题,只要care一下模板里数组下标从0开始这里是从1开始,dmax第二维大小是log2(maxn)。><

#include<iostream>#include<stdio.h>#include<cstdio>#include<stdlib.h>#include<vector>#include<string>#include<cstring>#include<cmath>#include<algorithm>#include<stack>#include<queue>#include<ctype.h>#include<map>#include<time.h>#include<bitset>#include<set>#include<list>using namespace std;//hdu 5443const int maxn=1010;int T;int a[maxn];int q;int l;int r;int n;int dmax[maxn][10];void RMQ_init(){    for(int i=0;i<n;i++)    {        dmax[i][0]=a[i];    }    for(int j=1;(1<<j)<=n;j++)    {        for(int i=0;i+(1<<j)-1<n;i++)        {            dmax[i][j]=max(dmax[i][j-1],dmax[i+(1<<(j-1))][j-1]);        }    }}int RMQmax(int L,int R){    int K=0;    while((1<<(K+1))<=R-L+1)    {        K++;       // cout<<K<<endl;    }    return max(dmax[L][K],dmax[R-(1<<K)+1][K]);}int main(){    freopen("input.txt","r",stdin);    scanf("%d",&T);    for(int ca=1;ca<=T;ca++)    {        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%d",&a[i]);        }        memset(dmax,0,sizeof(dmax));        RMQ_init();        scanf("%d",&q);        for(int i=0;i<q;i++)        {            scanf("%d %d",&l,&r);            printf("%d\n",RMQmax(l-1,r-1));        }    }    return 0;}



0 0