Pagini recente » Cod sursa (job #2137969) | Cod sursa (job #750519) | Cod sursa (job #2645625) | Cod sursa (job #790969) | Cod sursa (job #3152116)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <unordered_map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <iomanip>
#include <vector>
#include <bitset>
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
typedef long long ll;
const ll Nmax=1e5+5, inf=1e9+5;
using pii=pair<int, int>;
int n, m, v[Nmax], rmq[20][Nmax], p2[Nmax];
int querry (int l, int r){
int d=r-l+1, p=p2[d];
return min(rmq[p][l], rmq[p][r-(1<<p2[d])+1]);
}
int main()
{
fin>>n>>m;
for (int i=0; i<n; i++){
fin>>v[i];
rmq[0][i]=v[i];
}
///precalculare
int p=2, i=0;
while (p<=n){
i++;
for (int j=0; j+p<=n; j++){
rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j+p/2]);
fout<<rmq[i][j]<<' ';
}
fout<<'\n';
p*=2;
}
p=1; int ind=-1;
for (int i=1; i<=Nmax; i++){
if (p==i){
ind++;
p*=2;
}
p2[i]=ind;
}
///querryuri
int a, b;
for (int i=0; i<m; i++){
fin>>a>>b;
a--; b--;
fout<<querry(a, b)<<'\n';
}
return 0;
}