Pagini recente » Cod sursa (job #2942433) | Cod sursa (job #1687094) | Cod sursa (job #1575692) | Cod sursa (job #1848037) | Cod sursa (job #155293)
Cod sursa(job #155293)
#include <fstream>
using namespace std;
#define min(x, y) ((x) < (y) ? (x) : (y))
const int MAX_N = 100001;
const int INF = 1000000000;
int N, M;
int value[MAX_N], BIT[MAX_N];
//inline int min(const int &x, const int &y)
//{
// return x < y ? x : y;
//}
void insert(int p, int value)
{
for(; p <= N; p += p ^ (p & (p - 1)))
BIT[p] = min(BIT[p], value);
}
int query(int A, int B)
{
int ret = INF;
while(A <= B)
if(A == B)
{
ret = min(ret, value[B]);
--B;
}
else
if((B & (B - 1)) >= A)
{
ret = min(ret, BIT[B]);
B &= (B - 1);
}
else
{
ret = min(ret, value[B]);
B--;
}
return ret;
}
int main()
{
ifstream input;
input.open("rmq.in");
ofstream output;
output.open("rmq.out");
int A, B;
input >> N >> M;
for(int i = 1; i <= N; ++i)
BIT[i] = INF;
for(int i = 1; i <= N; ++i)
input >> value[i], insert(i, value[i]);
for(int i = 0; i < M; ++i)
{
input >> A >> B;
output << query(A, B) << "\n";
}
return 0;
}