Cod sursa(job #1834155)

Utilizator dhiarmisCarpen Diana dhiarmis Data 23 decembrie 2016 23:32:12
Problema Range minimum query Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <vector>
 
using namespace std;
 
#define NMAX 100002
#define INF 0x3f3f3f3f
 
long int a[NMAX],sq[NMAX];
long int rt;
long int n,m;
 
int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
 
    long int i,j,x,y,ls,ld;
 
    scanf("%ld %ld",&n,&m);
 
    for (i=1;i<=n;i++)
        scanf("%ld",&a[i]);
 
    for (rt=0;rt*rt<=n;rt++);
    rt--;
 
    for (i=1;rt*i<=n;i++)
        {
        sq[i]=INF;
        for (j=rt*(i-1)+1;j<=rt*i;j++)
            sq[i]=min(sq[i],a[j]);
        }
 
    for (i=1;i<=m;i++)
    {
        long int mn;
        mn=INF;
        scanf("%ld %ld",&x,&y);
        for (j=1;rt*j<x;j++);
        j++;
        ls=min(rt*(j-1),y);
        for (;rt*j<=y;j++)
            mn=min(mn,sq[j]);
        ld=max(rt*(j-1),x);
 
        for (j=x;j<=ls;j++)
            mn=min(mn,a[j]);
        for (j=ld;j<=y;j++)
            mn=min(mn,a[j]);
        printf("%ld\n",mn);
    }
    return 0;
}