Cod sursa(job #1942803)

Utilizator the.manIon Man the.man Data 28 martie 2017 11:09:45
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int Dim=100005;
int n,m,i,j,c[Dim][20],a[Dim],x,y,L;

void precalculare()
{

for(i=1; i<=n; i++) c[i][0]=i;  //initializare

for(j=1; (1<<j) <= n; j++)
for(i=1; i+ (1<<(j-1)) <= n; i++)
    if (a[ c[i][j-1] ]  <  a [ c[i+(1<<(j-1))][j-1] ] )  c[i][j] = c[i][j-1] ;
                                        else c[i][j]= c[i+(1<<(j-1))][j-1];


}

int raspuns(int x ,int y)
{
L=log2(y-x);
return min(a[c[x][L]],a[c[y-(1<<L)+1][L]]);

}
int main ()
{
f>>n>>m;
for(i=1; i<=n; i++) f>>a[i];
precalculare();

while(m--)
    {
        f>>x>>y;
        g<<raspuns(x,y)<<'\n';
    }
return 0;
}