Pagini recente » Cod sursa (job #2916546) | Cod sursa (job #969324) | Cod sursa (job #75368) | Cod sursa (job #1977485) | Cod sursa (job #2226277)
#include <bits/stdc++.h>
#define LOG(x) for(k=0;(1<<k)<=(x);k++);--k;
using namespace std;
#define MAX_OUT 7000000
#define MAX_BUFF 65536 * 2
int ptr = MAX_BUFF;
char c, buff[MAX_BUFF];
int result, now;
char out[MAX_OUT];
int ss, dig[8];
inline char getChar() {
if (ptr == MAX_BUFF) {
fread(buff, 1, MAX_BUFF, stdin);
ptr = 0;
}
return buff[ptr++];
}
inline int freef() {
result = 0;
do {
c = getChar();
} while (!isdigit(c));
do {
result = (result << 3) + (result << 1) + c - '0';
c = getChar();
} while (isdigit(c));
return result;
}
inline void put(int x) {
if (x == 0) {
dig[ss++] = 0;
}
while (x) {
result = x / 10;
dig[ss++] = x - (result << 3) - (result << 1);
x = result;
}
while (ss) {
out[now++] = dig[ss - 1] + '0';
ss--;
}
out[now++] = '\n';
}
int n,m,k;
int RMQ[17][100001]= {0};
void read_data()
{
freopen("rmq.in", "r", stdin);
n = freef();
m = freef();
for(int i=1; i<=n; i++) RMQ[0][i] = freef();
}
void compute()
{
for(int i=0; i<16; i++)
for(int j=1; j<n-i; j++)
RMQ[i+1][j]=min(RMQ[i][j],RMQ[i][j+(1<<i)]);
}
void answer()
{
freopen("rmq.out", "w", stdout);
while(m--)
{
int x = freef(), y = freef();
LOG(y-x+1);
put(min(RMQ[k][x],RMQ[k][y+1-(1<<k)]));
}
fwrite(out, 1, now, stdout);
}
int main()
{
read_data();
compute();
answer();
}