Pagini recente » Cod sursa (job #2447173) | Istoria paginii runda/inca_inca_vacanta_ix_2 | Cod sursa (job #1095298) | Cod sursa (job #493410) | Cod sursa (job #578322)
Cod sursa(job #578322)
#include<fstream>
#include<cmath>
#define dmax 100010
#define inf 99999
using namespace std;
int n,m;
int a[dmax];
long long rmq[20][dmax];
int logaritm[dmax];
void calculare_log()
{
int i;
for (i=2; i<=n; i++)
logaritm[i] = logaritm[i/2] + 1;
}
void calculare_rmq()
{
int i,j;
for (i=1; i<=logaritm[n]; i++)
for (j=1; j<=n-(1<<i)+1; j++)
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
}
void citire()
{
int i;
int x,y;
int loga;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
fin>>n>>m;
for (i=1; i<=n; i++)
{
fin>>a[i];
rmq[0][i] = a[i];
}
calculare_log();
calculare_rmq();
for (i=1; i<=m; i++)
{
fin>>x>>y;
loga = logaritm[y-x+1];
fout<< min(rmq[loga][x], rmq[loga][y+1-(1<<loga)])<<'\n';
}
fin.close();
fout.close();
}
int main()
{
citire();
return 0;
}