Cod sursa(job #2048542)

Utilizator Johnny07Savu Ioan-Daniel Johnny07 Data 26 octombrie 2017 11:05:10
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
//const int maxx=(1<<30);
int v[132010],n,m;
int mat[200010][17];
int log, pow, k,mi;
int poz1,poz2,poz,powf;
int main()
{
    int i;
f>>n>>m;
//mi=maxx;
for (i=1;i<=n;i++)
{
    f>>v[i];
  //  mi=min(mi,v[i]);
}
for (i=1;i<=n;i++)
{
    mat[i][0]=v[i];
}
log=1;
while (log<n)
{
    log*=2;
}
pow=1;
for (k=1;k<=log;k++)
{
pow*=2;
for (i=1;i<=n;i++)
{
    powf=min(i+pow/2,n);
    mat[i][k]=min(mat[i][k-1],mat[powf][k-1]);
}
}
for(i=1;i<=m;i++)
{
    log=1;
    f>>poz1>>poz2;
    poz=poz2-poz1;
    while (log*2<poz) log*=2;
    mi=min(mat[poz1][log],mat[poz2-log][log]);
    g<<mi<<"\n";
}

    return 0;
}