Pagini recente » Cod sursa (job #973290) | Cod sursa (job #2098092) | Cod sursa (job #1380579) | Cod sursa (job #3128470) | Cod sursa (job #1323497)
#include <stdio.h>
FILE *fin, *fout;
long int p[17];
int n, m, x, y, s;
bool r;
int min(int a, int b)
{
return (a > b)?b:a;
}
int log(int a)
{
for(int i =0;;i++)
{
if(p[i] > a) return i-1;
}
}
int main()
{
p[0]=1;
for(int i=1;i<17;i++)
{
p[i]=p[i-1]*2;
}
fin = fopen("rmq.in", "r");
fout = fopen("rmq.out", "w");
fscanf(fin, "%d %d", &n, &m);
int arr[log(n)+1][n];
s = n;
for(int i =0; i<= log(n);r = 1, s-=p[i], i++)
{
for(int j = 0; j< s; j++)
{
if(r == 0)
{
fscanf(fin, "%d", &arr[i][j]);
}
else arr[i][j] = min(arr[i-1][j], arr[i-1][j+p[i-1]]);
}
}
for(int i =0; i< m; i++)
{
fscanf(fin, "%d%d", &x, &y);
if(x==y) fprintf(fout, "%d\n",arr[0][x-1]);
else fprintf(fout, "%d\n", min(arr[log(y-x)][x-1], arr[log(y-x)][y - p[log(y-x)] ] ));
}
return 0;
}