Pagini recente » Cod sursa (job #3179468) | Cod sursa (job #2282807) | Cod sursa (job #2585198) | Istoria paginii runda/26_februarie_simulare_oji_2024_clasele_11_12/clasament | Cod sursa (job #3217165)
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
///calin+popy
int sp[100005][105];
int lg[100005], v[100005];
void buildSparseTable(int arr[], int n)
{
for (int i=0;i<n;i++)
sp[i][0]=arr[i];
int k=lg[n];
for(int j=1;j<=k;j++)
{
for(int i=0;i+(1<<j)<=n;i++)
{
int nr=(1<<(j-1));
sp[i][j]=min(sp[i][j-1],sp[i+nr][j-1]);
}
}
}
int query(int i, int j)
{
int len=j-i+1;
int k=lg[j-i+1], nr=(1<<k);
return min(sp[i][k],sp[i+len-nr][k]);
}
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
for(int i=2; i<100005; i++)
lg[i] = 1 + lg[i/2];
int n,m, x, y;
cin >> n >> m;
for(int i=1;i<=n;i++)
{
cin >> v[i];
}
buildSparseTable(v,n);
for(int i=1;i<=m;i++)
{
cin >> x>>y;
cout<<query(x, y)<<'\n';
}
return 0;
}