Mai intai trebuie sa te autentifici.
Cod sursa(job #2864829)
Utilizator | Data | 8 martie 2022 11:42:23 | |
---|---|---|---|
Problema | Range minimum query | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.65 kb |
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int m[20][100001],n,q;
int mini(int a,int b)
{
if(a<b) return a;
return b;
}
int query(int s, int d)
{
int k=d-s+1;
k=log2(k);
return mini(m[k][s],m[k][d-(1<<k)+1]);
}
int main()
{
int i,k,x,y,j,logaritm;
f>>n>>q;
for(i=1;i<=n;i++)
f>>m[0][i];
for(i=1;i<=log2(n)+1;i++)
for(j=1;j<=n-(1<<i)+1;j++)
m[i][j]=mini(m[i-1][j],m[i-1][j+(1<<(i-1))]);
for(i=1;i<=q;i++)
{
f>>x>>y;
g<<query(x,y)<<'\n';
}
return 0;
}