Pagini recente » Cod sursa (job #2362162) | Cod sursa (job #990787) | Cod sursa (job #848507) | Cod sursa (job #1702519) | Cod sursa (job #226643)
Cod sursa(job #226643)
#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<=log[N];i++)
matrice[i]=new int[N+1];
for(i=1;i<=N;i++)
fscanf(pin,"%d",matrice[0]+i);
for(i=1;i<=log[N];i++)
for(j=1;j<=N-(1<<i)+1;j++)
{
aux=1<<(i-1);
if(matrice[i-1][j]<matrice[i-1][j+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-(1<<aux);
if(matrice[aux][x]<matrice[aux][x+aux2])
fprintf(pout,"%d\n",matrice[aux][x]);
else
fprintf(pout,"%d\n",matrice[aux][x+aux2]);
}
//eliberez memoria
for(i=0;i<=log[N];i++)
delete[] matrice[i];
delete [] matrice;
delete []log;
//inchid fisierele
fclose(pin);
fclose(pout);
return 0;
}