Cod sursa(job #1388250)

Utilizator tdr_drtTdr Drt tdr_drt Data 15 martie 2015 12:38:55
Problema Range minimum query Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int a[300001],b[100001],n,k,x,y;

void build(int nod,int x,int y){
  if(x==y) a[nod]=b[x];
  else{
    int mid=(x+y)/2;
    build(nod*2,x,mid);
    build(nod*2+1,mid+1,y);
    a[nod]=min(a[nod*2],a[nod*2+1]);
  }
}

int ask(int nod,int x,int y,int xi,int yi){
  if(xi<=x&&yi>=y) return a[nod];
  else{
    int min1=99999999999,mid=(x+y)/2;
    if(xi<=mid) min1=min(min1,ask(2*nod,x,mid,xi,yi));
    if(yi>mid) min1=min(min1,ask(2*nod+1,mid+1,y,xi,yi));
    return min1;
  }
}

int main(){

  f>>n>>k;
  for(int i=1;i<=n;i++) f>>b[i];
  build(1,1,n);
  while(k--){
    f>>x>>y;
    g<<ask(1,1,n,x,y)<<"\n";
  }
  //for(int i=1;i<=9;i++) g<<a[i]<<" ";
 return 0;
}