Cod sursa(job #1772413)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 6 octombrie 2016 18:54:18
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <fstream>

using namespace std;
int n,m,i,p,a[100005],j,rmq[20][100005],L,l,x,y,k;
int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    p=2;
    for(i=1; p<100000; i++)
    {
        a[p]=1;
        p*=2;
    }
    for(i=3; i<100000; i++)
        a[i]+=a[i-1];
    f>>n>>m;
    for(j=1; j<=n; j++)
        f>>rmq[0][j];
    for(i=1; 1<<i <n; i++)
    {
        L=1<<i;
        l=L/2;
        for(j=1; j<=n-L+1; j++)
		rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+l]);
    }
    for(i=1; i<=m; i++)
    {
        f>>x>>y;
        k=a[y-x];
        g<<min(rmq[k][x],rmq[k][y-(1<<k)+1])<<'\n';
    }
    f.close(); g.close();
    return 0;
}