Cod sursa(job #2391775)
| Utilizator | Data | 29 martie 2019 11:03:00 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 60 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.63 kb |
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n, q, m[Nmax][30], a[Nmax], i, j, x, y, k, lg;
int main()
{
fin >> n >> q;
for(i=1; i<=n; i++)
fin >> a[i];
for(i=1; i<=n; i++)
m[i][0]=a[i];
for(j=1; (1<<j) <= n ; j++)
for(i=1; i+j-1 <=n ; i++)
m[i][j]=min(m[i][j-1], m[i+(1<<(j-1))][j-1]);
for(i=1; i<=q; i++)
{
fin >> x >> y;
k=0;
lg=y-x+1;
while((1<<k+1) <= lg)
k++;
fout << min (m[x][k], m[y-(1<<k)+1][k]) << '\n';
}
return 0;
}
