Cod sursa(job #1809710)

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