Cod sursa(job #2149967)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 3 martie 2018 09:55:35
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <iostream>
#include <fstream>
#define MAX 100010

using namespace std;

int n,m,ii,mri,a,b,ans;
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 i=1;i<=m;i++){
      f>>a>>b;
      mri=b-a+1;ans=MAX;
      for(int sp=0;mri;mri/=2,sp++)
        if(mri%2)ans=min(ans,mi[a][sp]),a+=(1<<sp);
      g<<ans<<'\n';
    }
    f.close();
    g.close();
    return 0;
}