Cod sursa(job #2127935)

Utilizator AndreiStanescuAlloys Nokito AndreiStanescu Data 11 februarie 2018 11:37:33
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb

#include<stdio.h>
#include<iostream>
#include<vector>
#define N 100002
#define Dim 0x3f3f3f3f
using namespace std;

long int a[N],v[N],t,n,m;


int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    long int i,j,x,y,s,d;
    scanf("%ld\n%ld",&n,&m);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(t=0;t*t<n;t++);
    for(i=1;t*i<=n;i++)
    {
        v[i]=Dim;
        for(j=t*(i-1)+1;j<=t*i;j++)
            v[i]=min(v[i],a[j]);
    }
    for(i=1;i<=m;i++)
    {
        long int ans;
        ans=Dim;
        scanf("%d %d",&x,&y);
        for(j=1;j*t<x;j++);
        s=min(t*j,y);
        j++;
        for(;j*t<=y;j++)
            ans=min(ans,v[j]);
        d=max((j-1)*t,x);
        for(j=x;j<=s;j++)
            ans=min(ans,a[j]);
        for(j=d;j<=y;j++)
            ans=min(ans,a[j]);
        printf("%d\n",ans);

    }


}