Pagini recente » Cod sursa (job #448678) | Cod sursa (job #1808344) | Cod sursa (job #2721556) | Cod sursa (job #2475895) | Cod sursa (job #1027705)
#include <fstream>
std::ifstream f ("rmq.in");
std::ofstream g ("rmq.out");
short v[100005], N, M, rmq[20][100005];
short lg[100005];
int main()
{
f >> N >> M;
for(int i = 1; i <= N; i++)
f>>v[i];
lg[1] = 0;
for(int i = 2; i <= N; i++)
lg[i] = lg[i/2]+1;
for (int i = 1; i <= N; i++)
rmq[0][i] = v[i];
for (int i=1; (1 << i) <= N; i++)
for (int j=1; j <= N - (1 << i) + 1; j++){
int ln = 1 << (i-1);
rmq[i][j]= std::min( rmq[i-1][j] , rmq[i-1][j+ln] );
}
for(int i = 1 ; i <= M; i++){
int l, r;
f>>l>>r;
int d = r - l + 1;
int ln = lg[d];
int sh = d - (1<<ln);
g << std::min( rmq[ln][l], rmq[ln][l+sh] ) << "\n";
}
return 0;
}