Pagini recente » Cod sursa (job #390467) | Cod sursa (job #1941985) | Cod sursa (job #2648038) | Cod sursa (job #2215908) | Cod sursa (job #1897118)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,i,j,nr,x,y,z,k,k1,a[100001],b[25][100001],p[25];
int main()
{
f>>n>>m;
for(i=1 ; i<=n ; ++i)
{
f>>a[i];
b[0][i]=a[i];
}
g<<n<<'\n';
nr=1;
x=2;
p[0]=1;
while(x*2<n)
{
p[nr]=x;
nr++;
x*=2;
}
p[nr]=x;
for(i=1 ; i<=nr ; ++i)
for(j=1 ; j+p[i-1]<=n ; ++j)
b[i][j]=min(b[i-1][j],b[i-1][j+p[i-1]]);
for(i=0 ; i<=nr ; ++i)
{
for(j=1 ; j<=n ; ++j)
g<<b[i][j]<<" ";
g<<'\n';
}
for(k=1 ; k<=m ; ++k)
{
f>>i>>j;
y=j-i+1;
x=nr+1;
for(k1=nr ; k1>=0 ; --k1)
if(p[k1]<=y)
{
x=k1;
break;
}
g<<min(b[x][i],b[x][j-p[x]+1])<<"\n";
}
return 0;
}