Pagini recente » Cod sursa (job #351917) | Cod sursa (job #2963787) | Cod sursa (job #1001190) | Cod sursa (job #245702) | Cod sursa (job #1966713)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX 2000000
FILE*f=fopen("rmq.in","r");
FILE*g=fopen("rmq.out","w");
int v[100010],a[100010];
int n,m;
void adaug(int p, int x){
int b;
while (p<=n){
v[p]=min(v[p],x);
b=(p^(p-1))&p;
p+=b;
}
}
int minim(int x,int y){
int i,b,mx=MAX,my=MAX,p;
p=x;
while (p>0){
mx=min(v[p],mx);
b=(p^(p-1))&p;
p-=b;
}
p=y;
while (p>0){
my=min(v[p],my);
b=(p^(p-1))&p;
p-=b;
}
if (my>mx) return my;
else {
my=MAX;
for (i=x;i<=y;i++) if (a[i]<my) my=a[i];
return my;
}
}
int main()
{
int i,x,y;
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++)v[i]=MAX;
for (i=1;i<=n;i++){
fscanf(f,"%d",&a[i]);
adaug(i,a[i]);
}
for (i=1;i<=m;i++){
fscanf(f,"%d%d",&x,&y);
fprintf(g,"%d\n",minim(x,y));
}
fclose(f);
fclose(g);
return 0;
}