Pagini recente » Cod sursa (job #492737) | Cod sursa (job #591949) | Cod sursa (job #2486913) | Cod sursa (job #1846980) | Cod sursa (job #1818040)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *_fin;
int _in_loc; char _in_buff[4096];
void read_init(const char* nume) // Apelaţi această funcţie la începutul funcţiei <main>
{
_fin = fopen(nume, "r");
_in_loc = 4095;
}
char read_ch()
{
++_in_loc;
if (_in_loc == 4096) {
_in_loc = 0;
fread(_in_buff, 1, 4096, _fin);
}
return _in_buff[_in_loc];
}
int read_u32() // Apelaţi această funcţie pentru a citi un număr ce se încadrează în categoria <unsigned int>
{
int u32 = 0; char c;
while (!isdigit(c = read_ch()) && c != '-');
int sgn = 1;
if (c == '-') {
sgn = -1;
} else {
u32 = c - '0';
}
while (isdigit(c = read_ch())) {
u32 = u32 * 10 + c - '0';
}
return u32 * sgn;
}
long long read_u64() // Apelaţi această funcţie pentru a citi un număr ce se încadrează în categoria <unsigned long long>
{
long long u64 = 0; char c;
while (!isdigit(c = read_ch()) && c != '-');
long long sgn = 1;
if (c == '-') {
sgn = -1;
} else {
u64 = c - '0';
}
while (isdigit(c = read_ch())) {
u64 = u64 * 10 + c - '0';
}
return u64 * sgn;
}
int rmq[18][100005];
int lg2[100005];
int pow2[18];
int main() {
int i,j,n,q,limit,lf,rg;
read_init("home.in");
freopen("home.out", "w", stdout);
n = read_u32();
q = read_u32();
lg2[2] = 1;
for(i = 3;i <= n;i++){
lg2[i] = lg2[i>>1] + 1;
}
pow2[0] = 1;
for(i = 1;i <= lg2[n];i++){
pow2[i] = pow2[i-1]<<1;
}
for(i = 1;i <= n;i++){
rmq[0][i] = read_u32();
}
for(j = 1;j <= lg2[n];j++){
limit = n - ((1<<j) - 1);
for(i = 1;i <= limit;i++){
rmq[j][i] = min(rmq[j-1][i], rmq[j-1][i + pow2[j-1]]);
}
}
for(i = 1;i <= q;i++){
lf = read_u32();
rg = read_u32();
limit = lg2[rg - lf + 1];
printf("%d\n", min(rmq[limit][lf], rmq[limit][rg - pow2[limit] + 1]));
}
return 0;
}