Cod sursa(job #2153805)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 6 martie 2018 14:39:45
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <fstream>
#define MAX 100010

using namespace std;

int n,m,ii,mri,a,b,ans,p2[MAX];
int mi[MAX][17];

int main()
{
    ifstream f ("rmq.in");
    ofstream g ("rmq.out");
    f>>n>>m; for(int i=1;i<=n;i++)f>>mi[i][0];
    for(int sp=1;sp<=16;sp++)
      for(int i=1;i<=n;i++){
        mi[i][sp]=mi[i][sp-1];
        ii=i+(1<<(sp-1));
        if(ii<=n)mi[i][sp]=min(mi[i][sp],mi[ii][sp-1]);
      }
    for(int sp=0;sp<=16;sp++)
      for(int i=(1<<sp);i<=n&&i<(1<<(sp+1));i++)p2[i]=sp;
    for(int i=1;i<=m;i++){
      f>>a>>b;
      g<<min(mi[a][p2[b-a+1]],mi[b-(1<<p2[b-a+1])+1][p2[b-a+1]])<<'\n';
    }
    f.close();
    g.close();
    return 0;
}