Pagini recente » Cod sursa (job #1132920) | Cod sursa (job #285555) | Cod sursa (job #1629412) | Cod sursa (job #1699319) | Cod sursa (job #3144842)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int batog[320],v[100000];
int main()
{
FILE *fin, *fout;
int intrebare,min,rad,n,m,i,x,y;
char c;
fin=fopen("rmq.in", "r");
fscanf(fin, "%d%d", &n, &m);
rad=sqrt(n);
min=1000000;
fgetc(fin);
for(i=0; i<n; i++){
c=fgetc(fin);
while(c!='\n'){
v[i]=v[i]*10+c-'0';
c=fgetc(fin);
}
if(v[i]<min)
min=v[i];
if((i+1)%rad==0){
batog[i/rad]=min;
min=1000000;
}
}
fout=fopen("rmq.out", "w");
for(intrebare=0; intrebare<m; intrebare++){
c=fgetc(fin);
x=y=0;
while(c!=' '){
x=x*10+c-'0';
c=fgetc(fin);
}
while(c!='\n'){
y=y*10+c-'0';
c=fgetc(fin);
}
x--;
y--;
i=x;
min=1000000;
while(i<=y){
if(i%rad==0&&i+rad<=y){
if(batog[i/rad]<min)
min=batog[i/rad];
i+=rad;
}
else{
if(v[i]<min)
min=v[i];
i++;
}
}
fprintf(fout, "%d\n", min);
}
fclose(fin);
fclose(fout);
return 0;
}