Cod sursa(job #1753861)

Utilizator alex.craciunCraciun Alexandru alex.craciun Data 7 septembrie 2016 11:32:32
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
using namespace std;
FILE *f=fopen("rmq.in","r");
int dp[20][100020],n,m;
void citire()
{
    fscanf(f,"%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        fscanf(f,"%d",&dp[0][i]);

}
void vec( )
{
    for(int i=1;i<=log2(n);i++)
        for(int j=1;j+(1<<i)<=n+1;j++)
          dp[i][j]=min(dp[i-1][j],dp[i-1][j+(1<<(i-1))]);
}
int rmq(int x, int y)
{
    int p = log2(y-x+1);
    return min(dp[p][x],dp[p][y-(1<<p)+1]);
}
FILE *f1=fopen("rmq.out","w");
void rez( )
{
    int x,y;
    for(int i=1;i<=m;i++)
       {fscanf(f,"%d%d",&x,&y);
        fprintf(f1,"%d\n",rmq(x,y));
       }

}
int main()
{
    citire();
    vec();
    rez();
    return 0;
}