Cod sursa(job #2242686)

Utilizator lixiLixandru Andrei lixi Data 19 septembrie 2018 11:56:28
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N, M, m[100001][17];
int putere(int a, int p)
{
    int x = 1;
    while(p > 0)
        if(p % 2 == 0)
        {
            a = (long long)a * a;
            p /= 2;
        }
        else
        {
            x = (long long)x * a;
            p--;
        }
    return x;
}
int main()
{  int x,y;
    f >> N >> M;
    for(int i = 1; i <= N; i++)
    f>>m[i][0];

    for(int j = 1; putere(2, j) <= N; j++)
        for(int i = 1; i + putere(2, j) - 1<=N; i++)
            if(m[i][j - 1] < m[i + putere(2, j - 1)][j - 1])
                m[i][j] = m[i][j - 1];
            else
                m[i][j] = m[i + putere(2, j - 1)][j - 1];

              for(int i=0;i<M;i++)
              {
                  f>>x>>y;
                  int t=log2(y-x+1);
                  g<<min(m[x][t],m[y-putere(2,t)+1][t])<<'\n';
              }

                  return 0;
}