Cod sursa(job #1960607)

Utilizator AlexTheDagonBogdan Tudor AlexTheDagon Data 10 aprilie 2017 16:02:20
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <iostream>
#include <fstream>
#define S 400
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,m,a[100005],b[S],x,y,minn;
int main()
{
    in>>n>>m;
    for(int i=1;i<S-3;++i)b[i]=1000000;
    for(int i=1;i<=n;++i)
    {
        in>>a[i];
        b[(i-1)/S+1]=min(b[(i-1)/S+1],a[i]);
    }
    for(int t=1;t<=m;++t)
    {
        in>>x>>y;
        minn=1000000;
        for(int i=(x-1)/S+1;i<(y-1)/S+1;++i)minn=min(minn,b[i]);
        for(int i=x;i<min((x-1)/S*S+S,y+1);++i)minn=min(minn,a[i]);
        for(int i=max((y-1)/S*S,x);i<=y;++i)minn=min(minn,a[i]);
        out<<minn<<'\n';
    }
    return 0;
}