Cod sursa(job #221748)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 17 noiembrie 2008 21:21:25
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n,x,y,pos,val,minim,start,finish,arb[500000]; long m;
int min(int a,int b)
{if(a>b) return b;
return a;}
void update(int nod,int left,int right)
{if(left==right) {arb[nod]=val;return;}
int div=(left+right)/2;
if(pos<=div)update(2*nod,left,div);
else update(2*nod+1,div+1,right);
arb[nod]=min(arb[2*nod],arb[2*nod+1]);
}
void query(int nod,int left,int right)
{if(start<=left && right<=finish) {if(minim>arb[nod])minim=arb[nod];return;}
int div=(left+right)/2;
if(start<=div)query(2*nod,left,div);
if(div<right) query(2*nod+1,div+1,right);
}

int main()
{   in>>n>>m;
for(int i=1;i<=n;i++)
{pos=i;in>>val;update(1,1,n);}
for(;m;m--)
{in>>x>>y;
 start=x;finish=y;query(1,1,n);
 out<<minim<<'\n';}


      return 0;
}