Cod sursa(job #1195010)

Utilizator cnt_tstcont teste cnt_tst Data 5 iunie 2014 18:42:45
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int minim(int a, int b) {
    return (a < b ? a : b);
}
int a,b,i,j,n,m,v[100000],D[21][100000],P[100000],x;
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>v[i];
    for(i=1;i<=n;i++)
        D[0][i]=v[i];
    for(i=1;(1<<i)<=n;i++)
        for(j=1;j<=n;j++){
//            D[i][j] = minim (D[i-1][j], D[i-1][j+ (1<<(i-1)) ]);

            D[i][j] = D[i-1][j];
            if (  (j + 1<<(i-1)) <= n && D[i-1][j]>D[i-1][j+ 1<<(i-1) ])
                D[i][j] = D[i-1][j+ 1<<(i-1) ];

        }
    P[1]=0;
    for(i=2;i<=n;i++)
        P[i]=1+P[i/2];
    for(i=1;i<=m;i++){
           f>>a>>b;
           x=P[b-a+1];
           g<< minim(D[x][a],D[x][b-(1<<x)+1])<<"\n";

    }

    return 0;
}