Pagini recente » Cod sursa (job #2892839) | Cod sursa (job #2970403) | Cod sursa (job #1812760) | Cod sursa (job #2610874) | Cod sursa (job #226499)
Cod sursa(job #226499)
#include<stdio.h>
int main()
{
int N,T,*lg;
//int **matrice;
int matrice[18][100002];
FILE *p;
p=fopen("rmq.in","r");
fscanf(p,"%d",&N);
fscanf(p,"%d",&T);
lg=new int[N+1];
lg[1]=0;
for(int i=2;i<=N;i++)
lg[i]=lg[i/2]+1;
for(int i=1;i<=N;i++)
fscanf(p,"%d",matrice[0]+i);
for(int i=1;i<=lg[N];i++)
for(int j=1;j<=N-(i<<1)+1;j++)
{int 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];
}
FILE *pout=fopen("rmq.out","w");
for(int i=1;i<=T;i++)
{
int x,y;
fscanf(p,"%d",&x);
fscanf(p,"%d",&y);
int diff=y-x+1;
int aux=lg[diff];
int aux2=diff-(1<<aux);
int min;
if(matrice[aux][x]<matrice[aux][x+aux2])
min=matrice[aux][x];
else
min=matrice[aux][x+aux2];
fprintf(pout,"%d\n",min);
}
fclose(pout);
fclose(p);
//for(int i=0;i<=lg[N];i++)
// delete []matrice[i];
//delete []matrice;
delete []lg;
return 0;
}