Pagini recente » Cod sursa (job #890580) | Cod sursa (job #2820010) | Cod sursa (job #2894821) | Cod sursa (job #1345406) | Cod sursa (job #2905901)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int N=1e5;
const int logsize=17;
int n;
int sp[N];
int mat[N][logsize];
void citire()
{
int x,y;
fin>>n;
for (int i=0;i<n;i++)
{
fin>>x>>mat[i][0];
sp[i]=sp[i-1]+x;
}
}
long long range_min(int st,int dr)
{
long long s = dr - st + 1, nr = 0;
nr = (long long)log2(s);
return min(mat[st][nr], mat[dr - (long long)pow(2, nr) + 1][nr]);
}
void solve()
{
for (int j = 1; j <= logsize; j++)
for (int i = 0; i + (int)pow(2, j) - 1 < n; i++)
mat[i][j] = min(mat[i][j - 1], mat[i + (int)pow(2, (j - 1))][j - 1]);
int q;
fin>>q;
for (int i=0;i<q;i++)
{
int left,right;
fin>>left>>right;
left--;
right--;
fout<<range_min(left,right)*(sp[right]-sp[left-1])<<'\n';
}
}
void solve_rmq()
{
int n,m;
fin>>n>>m;
for (int i=1;i<=n;i++)
fin>>mat[i][0];
for (int j = 1; j <= logsize; j++)
for (int i = 1; i + (int)pow(2, j) - 1 <= n; i++)
mat[i][j] = min(mat[i][j - 1], mat[i + (int)pow(2, (j - 1))][j - 1]);
while(m--)
{
int st,dr;
fin>>st>>dr;
fout<<range_min(st,dr)<<'\n';
}
}
int main()
{
//citire();
//solve();
solve_rmq();
}