Pagini recente » Cod sursa (job #2835416) | Cod sursa (job #513763) | Cod sursa (job #2264903) | Borderou de evaluare (job #1450147) | Cod sursa (job #2429163)
#include <iostream>
#include <cstdio>
using namespace std;
const int NMAX = 100001;
int v[NMAX];
int log[NMAX];
int t[NMAX][17];
int min(int a, int b){
return a < b ? a : b;
}
int max(int a, int b){
return a > b ? a : b;
}
void creare_rmq(int n){
int i,j;
for(i=1;i<=n;i++)
t[i][0] = v[i];
for(j=1;(1<<j)<n;j++)
for(i=1;i + (1<<j) - 1<= n;i++)
t[i][j] = min(t[i][j-1], t[i+(1<<(j-1))][j-1]);
}
int rmq(int x, int y){
int elemente = y - x + 1;
int seturi = log[elemente];
int ramase = elemente - (1 << seturi);
return min(t[x][seturi], t[x + ramase][seturi]);
}
int main()
{
FILE *fin, *fout;
int n,m,i,x,y,ans;
fin = fopen("rmq.in","r");
fout = fopen("rmq.out","w");
fscanf(fin,"%d %d",&n,&m);
for(i=1;i<=n;i++)
fscanf(fin,"%d",&v[i]);
log[1] = 0;
for(i=2;i<=n;i++)
log[i] = log[i/2] + 1;
creare_rmq(n);
for(i=1;i<=m;i++){
fscanf(fin,"%d %d",&x,&y);
ans = rmq(x, y);
fprintf(fout,"%d\n",ans);
}
fclose(fin);
fclose(fout);
return 0;
}