Cod sursa(job #1682470)

Utilizator nnnmmmcioltan alex nnnmmm Data 10 aprilie 2016 11:51:26
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<cstdio>
#include<algorithm>
const int NMAX=100001;
int v[NMAX],rmq[18][NMAX],lg[NMAX];
int main()
{
 FILE *in=fopen("rmq.in","r");
 int n,m;
 fscanf(in,"%d %d ",&n,&m);
 for(int i=1;i<=n;i++)
     {
      fscanf(in,"%d ",&v[i]);
     }
 lg[1]=0;
 for(int i=2;i<=n;i++)
     lg[i]=lg[i/2]+1;
 for(int i=1;i<=n;i++)
     rmq[0][i]=v[i];
 for(int lungime=1;(1<<lungime)<=n;lungime++)
     {
      for(int i=1;i<=n;i++)
          {
           rmq[lungime][i]=std::min(rmq[lungime-1][i],rmq[lungime-1][i+(1<<(lungime-1))]);
          }
     }
 FILE *out=fopen("rmq.out","w");
 for(int i=1;i<=m;i++)
     {
      int x,y;
      fscanf(in,"%d %d ",&x,&y);
      fprintf(out,"%d\n",std::min(rmq[lg[y-x+1]][x],rmq[lg[y-x+1]][x+y-x+1-(1<<lg[y-x+1])]));
     }
 fclose(in);
 fclose(out);
 return 0;
}