Cod sursa(job #2450206)

Utilizator eduardmirceabraguta eduard eduardmircea Data 22 august 2019 12:30:41
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
int n,i,j,m[60000][60000],a[1000010],c,x,y,k;
int main()
{
in>>n;
   in>>c;
for(i=0;i<n;i++)
   {in>>a[i];
   }
   for(i=0;i<n;i++)m[i][0]=i;



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

/*
   for(j=0;1<<j<=n;j++)
   {for(i=0;i+(1<<j)-1<n;i++)   cout<<i<<" "<<(1<<j)<<" "<<a[m[i][j]]<<endl;;
cout<<endl;

   }*/


   for(i=1;i<=c;i++)
   {in>>x>>y;
   x--;y--;
   k=log(y-x+1);

   if(a[m[x][k]]<a[m[y-(1<<k)+1][k]])out<<a[m[x][k]]<<"\n";
   else{out<<a[m[y-(1<<k)+1][k]]<<"\n";}

   }





    return 0;

}