Cod sursa(job #2164862)

Utilizator aditzu7Adrian Capraru aditzu7 Data 13 martie 2018 10:09:19
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");

int sol,b,a2,j,t,a[100001],v[100001],n,m,i,j2,rmq[100001][20];
int main()
{
 fscanf(f,"%d%d",&n,&m);
 for(i=1;i<=n;i++)
    fscanf(f,"%d",&v[i]);

 for(i=1;i<=n;i++)rmq[i][0]=i;
for(j=1;(1<<j)<=n;j++)
    for(i=1;i<=n-(1<<j)+1;i++)
 {
   if(v[rmq[i][j-1]]<v[rmq[i+(1<<(j-1))][j-1]]) rmq[i][j]=rmq[i][j-1];
else rmq[i][j]=rmq[i+(1<<(j-1))][j-1];


 }
 for(t=1;t<=m;t++){
    fscanf(f,"%d%d",&a2,&b);sol=100001;
   int dif=b-a2+1;
   int l=(int)(log2(dif));

    fprintf(g,"%d\n",min(v[rmq[a2][l]],v[rmq[b-(1<<l)+1][l]]));
 }

    return 0;
}