Lightoj 1082【RMQ】

来源:互联网 发布:linux编辑保存命令 编辑:程序博客网 时间:2024/05/29 18:47

这里很low地写了个线段树。。。

#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e5+10;struct SegT{    int left;    int right;    int w;};SegT q[N*4];void Build(int num,int L,int R){    q[num].left=L;    q[num].right=R;    if(q[num].left==q[num].right)    {        scanf("%d",&q[num].w);        return;    }    int mid=(L+R)/2;    Build(2*num,L,mid);    Build(2*num+1,mid+1,R);    q[num].w=min(q[2*num].w,q[2*num+1].w);}int query(int num,int s,int t){    if(q[num].left>=s&&q[num].right<=t)        return q[num].w;    int mid=(q[num].left+q[num].right)/2;    if(mid>=t)        return query(2*num,s,t);    else if(mid<s)        return query(2*num+1,s,t);    else        return min(query(2*num,s,mid),query(2*num+1,mid+1,t));}int main(){    int T,cas=1,n,m;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&n,&m);        Build(1,1,n);        int u,v;        printf("Case %d:\n",cas++);        while(m--)        {            scanf("%d%d",&u,&v);            printf("%d\n",query(1,u,v));        }    }    return 0;}


0 0