Cod sursa(job #2754544)

Utilizator StefaniaCriStefania Cristea StefaniaCri Data 25 mai 2021 23:35:23
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int value=100000;
int n,m;
const int logar=log(value)+1;
int input[value];
int sparse[value][6];
void preprocesare (int input[], int n)
{
    for(int i=0;i<n;i++)
        sparse[i][0]=i;
    for(int j=1;pow(2,j)<=n;j++)
        {
            int pw2=pow(2,j-1);
            for(int i=0;i+pow(2,j)-1<n;i++)
             if(input[sparse[i][j-1]]
                <input[sparse[i+pw2][j-1]])
                    sparse[i][j]=sparse[i][j-1];
             else
                sparse[i][j]=sparse[i+pw2][j-1];
        }
}
int rmq(int st,int dr)
{   int l,k;
    l = dr-st+1;
    k = log(l);
    int pw2=pow(2,k);
    return min(input[sparse[st][k]],input[sparse[st+l-pw2][k]]);
}
int main()
{

    int x,y;
    f>>n>>m;
    for(int i=0;i<n;i++)
        f>>input[i];

    preprocesare(input,n);
    for(int i=0;i<m;i++)
    {
      f>>x>>y;
      if(x!=y)
      g<<rmq(x-1,y-1)<<endl;
    }
    return 0;
}