Pagini recente » Profil Roflmao | Istoria paginii utilizator/raresgruia | Diferente pentru probleme-de-taietura intre reviziile 96 si 27 | Istoria paginii utilizator/marinaflom | Cod sursa (job #3221856)
#include <bits/stdc++.h>
using namespace std;
#define TITLE "rmq"
#define ll long long
#define MOD 1000000000
ifstream f (TITLE".in");
ofstream g (TITLE".out");
int r[18][100001];
void solve()
{
int n,Q;
f>>n>>Q;
for(int i=1; i<=n; i++)
f>>r[0][i];
for(int i=1; (1<<i) <=n; i++)
{
for(int j=1; j<=n; j++)
{
r[i][j]=r[i-1][j];
int temp=j+(1<<(i-1));
if(temp<=n && r[i][j]>r[i-1][temp])
r[i][j]=r[i-1][temp];
}
}
int e[100001];
e[1]=0;
for(int i=2 ;i<=n; i++)
e[i]=1+e[i/2];
for(int i=0; i<Q; i++)
{
int st,dr;
f>>st>>dr;
int E=e[dr-st+1];
int temp=(1<<E);
g<<min(r[E][st],r[E][dr-temp+1])<<'\n';
}
}
int main()
{
solve();
return 0;
}