Pagini recente » Cod sursa (job #704413) | Cod sursa (job #414965) | Cod sursa (job #1118854) | Cod sursa (job #1113772) | Cod sursa (job #1189812)
///Template by Gergely David
#include <fstream>
//#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <deque>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <climits>
#define MIN (long int a, long int b) (((a)<(b))?(a):(b))
#define MAX (long int a, long int b) (((a)>(b))?(a):(b))
#define unsigned long long ull
using namespace std ;
const int NMAX = 1000005 ;
const int LMAX = 20 ;
const int INF = 0x3f3f3f3f ;
vector <int> V ;
queue < pair <int, int> > Q ;
ifstream cin("rmq.in") ;
ofstream cout("rmq.out") ;
long int N, M, A[NMAX] ;
long int RMQ[LMAX][NMAX];
long int lg[NMAX] ;
inline int Read()
{
cin >> N >> M ;
for(int i = 1 ; i <= N ; ++ i )
cin >> A[i] ;
}
int main()
{
Read() ;
lg[0] = 1 ;
for(int i = 2 ; i <= N ; ++ i)
lg[i] = lg[i / 2] + 1 ;
for(int i = 1 ; i <= N ; ++ i)
RMQ[0][i] = A[i] ;
int l ;
for(int i = 1 ; (1 << i) <= N ; ++ i)
for(int j = 1 ; j <= N - (1 << i) + 1 ; ++ j)
{
l = 1 << ( i - 1) ;
RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + 1]) ;
}
long int diference, sh ;
for(int i = 1 ; i <= M ; ++ i)
{
int x;
int y ;
cin >> x >> y ;
diference = y - x + 1 ;
l = lg[diference] ;
sh = diference - (1 << l) ;
cout << min(RMQ[l][x], RMQ[l][x + sh]) << '\n' ;
}
cin.close() ;
cout.close() ;
return 0 ;
}