Cod sursa(job #2468582)

Utilizator Chirac_MateiChiriac Matei Chirac_Matei Data 5 octombrie 2019 17:54:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
long long pow,n,q,i,j,x,y;
int a[100000];
int dp[17][100000];
int qu(int x, int y)
{
    int pow=1,i=1;
    while(pow*2<=y-x+1)
    {
        i++;
        pow*=2;
    }
    if(pow==y-x+1)
        return dp[i][x];
    return min(dp[i][x], dp[i][y-pow+1]);
}
int main()
{
    fin>>n>>q;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    pow=1;
    for(i=1;pow<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(i==1)
                dp[i][j]=a[j];
            else
            {
                if(j+pow/2<=n)
                    dp[i][j]=min(dp[i-1][j],dp[i-1][j+pow/2]);
                else
                    dp[i][j]=dp[i-1][j];
            }
        }
        pow*=2;
    }
    while(q)
    {
        fin>>x>>y;
        fout<<qu(x,y)<<'\n';
        q--;
    }
    return 0;
}