Pagini recente » Cod sursa (job #1587182) | Cod sursa (job #2748926) | Cod sursa (job #1711309) | Cod sursa (job #2593082) | Cod sursa (job #226623)
Cod sursa(job #226623)
#include<stdio.h>
int main()
{
//deschid fisierele
FILE *pin=fopen("rmq.in","r");
FILE *pout=fopen("rmq.out","w");
//declar variabile
int N,T,*log,**matrice,i,j,aux,aux2;
int x,y,diff;
//citesc pe N si t
fscanf(pin,"%d",&N);
fscanf(pin,"%d",&T);
//calc vect log
log=new int[N+1];
log[1]=0;
for(i=2;i<=N;i++)
log[i]=log[i/2]+1;
matrice=new int*[log[N]+1];
for(i=0;i<=N;i++)
matrice[i]=new int[N+1];
for(i=1;i<=N;i++)
{
fscanf(pin,"%d",matrice[0]+i);
printf("%d ",matrice[0][i]);
}
for(i=1;i<=log[N];i++)
for(j=1;j<=N-log[i]+1;j++)
{aux=(i-1)<<1;
if(matrice[i-1][j]<matrice[i-1][aux])
matrice[i][j]=matrice[i-1][j];
else
matrice[i][j]=matrice[i-1][j+aux];
}
for(i=1;i<=T;i++)
{
fscanf(pin,"%d",&x);
fscanf(pin,"%d",&y);
diff=y-x+1;
aux=log[diff];
aux2=diff-(aux<<1);
if(matrice[aux][x]<matrice[aux][x+diff])
fprintf(pout,"%d\n",matrice[aux][x]);
else
fprintf(pout,"%d\n",matrice[aux][x+aux2]);
}
//eliberez memoria
for(i=0;i<=N;i++)
delete [] matrice[i];
delete[] matrice;
delete []log;
//inchid fisierele
fclose(pin);
fclose(pout);
return 0;
}