Cod sursa(job #3212898)
| Utilizator | Data | 12 martie 2024 11:47:50 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.67 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int r[17][100010],p2[100010],x,y,l,q,n;
int main()
{
f>>n>>q;
for(int i=1; i<=n; i++)
f>>r[0][i];
for(int i=2; i<=n; i++)
p2[i]=1+p2[i/2];
for(int p=1; (1<<p)<=n; p++)
for(int i=1; i<=n; i++)
{
r[p][i]=r[p-1][i];
int j=i+(1<<(p-1));
if(j<=n && r[p][i]>r[p-1][j])
r[p][i]=r[p-1][j];
}
for(int i=1; i<=q; i++)
{
f>>x>>y;
int e=p2[x-y+1];
l=(1<<p2[x-y+1]);
g<<min(r[e][x],r[e][y-l+1])<<'\n';
}
return 0;
}
