Cod sursa(job #2485934)
| Utilizator | Data | 2 noiembrie 2019 10:47:07 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.57 kb |
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n,t,m[30][100001],l2[100001],x,y,l;
int main()
{
fin>>n>>t;
for(int i=1; i<=n; ++i)
fin>>m[0][i];
l2[0]=l2[1]=0;
for(int i=2; i<=n; ++i)
l2[i]=l2[i>>1]+1;
for(int i=1; i<=l2[n]; ++i)
for(int j=1; j+(1<<(i-1))<=n; ++j)
m[i][j]=min(m[i-1][j],m[i-1][j+(1<<(i-1))]);
while(t--)
{
fin>>x>>y;
l=l2[y-x+1];
fout<<min(m[l][x],m[l][y-(1<<l)+1])<<'\n';
}
return 0;
}
