Cod sursa(job #1698843)

Utilizator Timur17Ibram Timur Timur17 Data 5 mai 2016 15:30:40
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<cstdio>
#include<cmath>
using namespace std;
int n,v[100023],bucata[100023];
int min(int a,int b)
{
    if(a<b) return a;
    return b;
}
int main()
{
    freopen ("rmq.in","r",stdin);
    freopen ("rmq.out","w",stdout);
    scanf("%d", &n);
    for(int i=1;i<=n;i++) bucata[i]=1000000000;
    for(int i=1;i<=n;i++) scanf("%d",&v[i]);
    int buc=1,mar=sqrt(n);
    for(int i=1;i<=n;i++)
    {
        if((i-1)%mar==0&&i!=1) ++buc;
        bucata[buc]=min(bucata[buc],v[i]);
    }
    int m;
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
    {
        int a,b,sum=1000000000;
        scanf("%d%d",&a,&b);
        for(int j=a;j<=b;j++)
        {
            if((j-1)%mar==0&&j+mar<=b&&j!=1)
            {
                sum=min(sum,bucata[(j-1)/mar +1]);
                j+=mar-1;
            }
            else sum=min(sum,v[j]);
        }
        printf("\n%d\n",sum);
    }
}