Pagini recente » Cod sursa (job #351888) | Cod sursa (job #955798) | Cod sursa (job #1323906) | Cod sursa (job #964918) | Cod sursa (job #2819678)
#include <stdio.h>
#include <stdlib.h>
#define MAXX 100000
int mat[MAXX][17];
int v[MAXX],l[MAXX+1];
void calc(int n) {
int i, put, put1, put2, minn;
for(i = 0; i < n; i++)
mat[i][0] = v[i];
for(put = 1; put <= 16; put++) {
put1 = 1 << put;
put2 = 1 << (put - 1);
for(i = 0; i + put1 <= n; i++) {
minn = mat[i][put-1];
if(mat[i+put2][put-1] < minn)
minn = mat[i+put2][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[dr - st + 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;
}