Pagini recente » Cod sursa (job #1992010) | Cod sursa (job #2267674) | Cod sursa (job #2320765) | Cod sursa (job #1000567) | Cod sursa (job #1942803)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int Dim=100005;
int n,m,i,j,c[Dim][20],a[Dim],x,y,L;
void precalculare()
{
for(i=1; i<=n; i++) c[i][0]=i; //initializare
for(j=1; (1<<j) <= n; j++)
for(i=1; i+ (1<<(j-1)) <= n; i++)
if (a[ c[i][j-1] ] < a [ c[i+(1<<(j-1))][j-1] ] ) c[i][j] = c[i][j-1] ;
else c[i][j]= c[i+(1<<(j-1))][j-1];
}
int raspuns(int x ,int y)
{
L=log2(y-x);
return min(a[c[x][L]],a[c[y-(1<<L)+1][L]]);
}
int main ()
{
f>>n>>m;
for(i=1; i<=n; i++) f>>a[i];
precalculare();
while(m--)
{
f>>x>>y;
g<<raspuns(x,y)<<'\n';
}
return 0;
}