Pagini recente » Cod sursa (job #1928009) | Cod sursa (job #1234885) | Cod sursa (job #1313619) | Cod sursa (job #2313565) | Cod sursa (job #932295)
Cod sursa(job #932295)
#include<cstdio>
#include<vector>
#define NMAX 100005
#define min(a,b) ((a)<(b)?(a):(b))
FILE *f=fopen("rmq.in","r");
FILE *g=fopen("rmq.out","w");
using namespace std;
long long lg[NMAX],rmq[18][18];
long long a[NMAX],n,m;
void read()
{
fscanf(f,"%d%d",&n,&m);
for(int i(1) ; i<= n ; ++i )
fscanf(f,"%d",&a[i]);
}
void preprocess( void )
{
lg[1]=0;
for(int i (2) ; i <= n ; ++i )
lg[i]=lg[i/2]+1;
//initializez matricea
for(int i(1) ; i <= n ; ++i)
rmq[0][i]=a[i];
for(int i(1); (1<<i) <= n ; ++i )
for(int ii(1) ; ii <= n- (1<<i) +1 ;++ii )
{
int len=1<<(i-1);
rmq[i][ii]=min(rmq[i-1][ii],rmq[i-1][ii+len]);
}
}
void Query( long long left ,long long right)
{
long long diff,l,sx;
diff=right-left+1;
l=lg[diff];
sx=diff-(1<<l);
fprintf(g,"%lld\n",min(rmq[l][left],rmq[l][left+sx]));
}
int main( void )
{
read();
preprocess();
while( m --)
{
long long v,b;
fscanf(f,"%lld%lld",&v,&b);
Query(v,b);
}
fclose(f);
fclose(g);
return 0;
}