Pagini recente » Cod sursa (job #1534900) | Cod sursa (job #1206068) | Cod sursa (job #189285) | Cod sursa (job #1671054) | Cod sursa (job #1679626)
#include <cstdio>
#define MAX 100001
using namespace std;
int r[MAX][20], log[MAX],v[MAX],n,m;
int min(int a, int b)
{
if(a<b)
return a;
else
return b;
}
void generare()
{
for(int i=1; i<=n; i++)
{
r[i][0]=v[i];
for(int j=1; (1<<j)<=i; j++)
{
r[i][j]=min(r[i][j-1],r[i-(1<<(j-1))][j-1]);
}
}
for(int i=2; i<=n; i++)
log[i]=1+log[i/2];
}
int rez(int x, int y)
{
int rasp,l;
l=log[y-x+1];
rasp=min(r[y][l],r[x+(1<<l)-1][l]);
return rasp;
}
int main()
{
FILE *fin,*fout;
fin=fopen("rmq.in","r");
fout=fopen("rmq.out","w");
fscanf(fin,"%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
fscanf(fin,"%d",&v[i]);
}
generare();
int x,y;
for(int i=1; i<=m; i++)
{
fscanf(fin,"%d%d",&x,&y);
fprintf(fout,"%d\n",rez(x,y));
}
/*for(int i=1; i<=n; i++)
{
fprintf(fout,"\n");
for(int j=0; (1<<j)<=i; j++)
{
fprintf(fout,"%d ",r[i][j]);
}
}*/
return 0;
}