Cod sursa(job #1809728)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 19 noiembrie 2016 10:57:02
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
int dp[20][100005],a,b;
int N,Q;
int main()
{
    fscanf(f,"%d%d",&N,&Q);
    for(int i=1;i<=N;i++)
        fscanf(f,"%d",&dp[0][i]);
    for(int j=1;(1<<j)<=N;j++)
    {
        for(int i=1;i+(1<<j)-1<=N;i++)
        {
            dp[j][i]=min(dp[j-1][i],dp[j-1][i+(1<<(j-1))]);
        }
    }
    while(Q)
    {
       fscanf(f,"%d%d",&a,&b);
       int rez=(1<<30),dist=b-a+1,p2=0;
       while((1<<p2)<=dist)
            p2++;
       p2--;
       rez=min(dp[p2][a],dp[p2][b-(1<<p2)+1]);
       fprintf(g,"%d\n",rez);
       Q--;
    }
    fclose(f);
    fclose(g);
    return 0;
}