Pagini recente » Cod sursa (job #1041197) | Cod sursa (job #2009666) | Cod sursa (job #736733) | Cod sursa (job #774025) | Cod sursa (job #157515)
Cod sursa(job #157515)
#include<fstream.h>
#define nmax 100000
#define vmax 150000
ofstream g("rmq.out");
int c[vmax][20], n, m, a[vmax];
char put[vmax];
int min(int x, int y)
{
if( x > y ) return y;
return x;
}
void afla_c()
{
int i, j;
for(i=1; i<=n; i++) c[i][0]=a[i];
for(j=1; j<=put[n]; j++)
for(i=1; i<=n; i++) c[i][j] = min( c[i][j-1], c[ i+(1<<(j-1)) ][ j-1 ] );
}
void afla_p()
{
int nr=0, i, con;
for(i=2; i<=nmax; i<<=1) put[i] = ++nr;
con=1;
for(i=3; i<=nmax; i++) if( con > put[i] ) put[i]=con;
else con++;
}
void citire()
{
int i, sol, p, x, y, j;
ifstream f("rmq.in");
f>>n>>m;
for(i=1; i<=n; i++) f>>a[i];
afla_p();
afla_c();
for(i=1; i<=m; i++){
f>>x>>y;
p = put[y-x+1];
sol = min ( c[x][p], c[y-(1<<p)+1][p]);
g<<sol<<'\n';
}
}
int main()
{
citire();
g.close();
return 0;
}