Pagini recente » Cod sursa (job #2118027) | Cod sursa (job #878911) | Cod sursa (job #1861465) | Cod sursa (job #2449109) | Cod sursa (job #3146162)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
FILE *fin, *fout;
int rmq[100001][20],v[20];
int main()
{
int n,m,i,put,exp,intrebare,x,y,log,a,cf;
char c;
fin=fopen("rmq.in", "r");
fscanf(fin, "%d%d", &n, &m);
fgetc(fin);
for(i=0; i<n; i++){
a=0;
c=fgetc(fin);
while(c!='\n'){
a=a*10+c-'0';
c=fgetc(fin);
}
rmq[i][0] = a;
}
exp=1;
for(put=2; put<n; put*=2){
for(i=0; i<n; i++){
if(i+put<n)
rmq[i][exp]=rmq[i][exp-1]<rmq[i+put/2][exp-1]?rmq[i][exp-1]:rmq[i+put/2][exp-1];
}
exp++;
}
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);
}
c=fgetc(fin);
while(c!='\n'){
y=y*10+c-'0';
c=fgetc(fin);
}
x--;
y--;
i=x;
log=31-__builtin_clz(y-x+1);
put=1<<log;
a=rmq[x][log]<rmq[y-put+1][log]?rmq[x][log]:rmq[y-put+1][log];
cf=20;
do{
v[--cf]=a%10;
a/=10;
}while(a>0);
while(cf<20){
fputc(v[cf++]+'0', fout);
}
fputc('\n', fout);
}
fclose(fin);
fclose(fout);
return 0;
}