Cod sursa(job #2370079)

Utilizator Alex221Dumitru Alexandru Alex221 Data 6 martie 2019 10:38:56
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define MAXN (1<<19)
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,poz,val,v[MAXN],m,a,b;
void constructie (int nod, int st, int dr)
{ if(st==dr) v[nod]=val;
   else
   { int mij=(st+dr)/2;
      if(poz<=mij) constructie(2*nod,st,mij);
      else  constructie(2*nod+1,mij+1,dr);
      v[nod]=min(v[2*nod],v[2*nod+1]);
   }
}
int raspuns (int nod, int st, int dr)
{ if(a<=st && dr<=b) return v[nod];
   else
   { int x1=MAXN, x2=MAXN, mij=(st+dr)/2;
     if(a<=mij) x1=raspuns(2*nod,st,mij);
     if(b>=mij+1) x2=raspuns(2*nod+1,mij+1,dr);
     return min(x1,x2);
   }
}
int main()
{ f>>n>>m;
  for(int i=1;i<=n;i++)
  { f>>val;
    poz=i;
    constructie(1,1,n);
  }
  for(int i=1;i<=m;i++)
  { f>>a>>b;
     g<<raspuns(1,1,n)<<'\n';
  }
    return 0;
}