Pagini recente » Cod sursa (job #544448) | Cod sursa (job #2819673)
#include <stdio.h>
#include <stdlib.h>
#define MAXX 100000
int mat[MAXX][17];
int v[MAXX],l[17];
void calc(int n) {
int i, put, minn, nr;
for(i = 0; i < n; i++)
mat[i][0] = v[i];
for(put = 1; put <= 16; put++) {
nr = 1 << put;
for(i = 0; i + put - 1 < n; i++) {
minn = mat[i][put-1];
if(mat[i+nr][put-1] < minn)
minn = mat[i+nr][put-1];
mat[i][put] = minn;
}
}
}
void putere(int n) {
int i;
for(i = 2; i <= n; i++)
l[i] = l[i / 2] + 1;
}
int rasp(int st, int dr) {
int p, put, minn;
p = l[st - dr + 1];
put = 1 << p;
minn = mat[st][p];
if(mat[dr - put + 1][p] < minn)
minn = mat[dr - put + 1][p];
return minn;
}
int main(){
FILE *fin,*fout;
int n,m,i,st,dr,af;
fin = fopen("rmq.in", "r");
fout = fopen("rmq.out", "w");
fscanf(fin, "%d%d", &n,&m);
for(i = 0; i < n; i++)
fscanf(fin, "%d", &v[i]);
putere(n);
calc(n);
for(i = 0; i < m; i++) {
fscanf(fin, "%d%d", &st, &dr);
st--;
dr--;
af = rasp(st, dr);
fprintf(fout, "%d\n", af);
}
fclose(fin);
fclose(fout);
return 0;
}