Pagini recente » Cod sursa (job #1146199) | Cod sursa (job #2289787) | Cod sursa (job #1809449) | Cod sursa (job #1679201) | Cod sursa (job #2900488)
#include <iostream>
#include <fstream>
#pragma GCC optimize("O4,inline")
std::ifstream in("rmq.in");
std::ofstream out("rmq.out");
int n, m, x, y, i, rmq[275000];
void inserareRMQ(int stg, int dr, int pozRMQ)
{
int mij = stg + (dr - stg) / 2;
if (stg == dr)
{
rmq[pozRMQ] = x;
return;
}
if (i <= mij)
{
inserareRMQ(stg, mij, 2 * pozRMQ + 1);
rmq[pozRMQ] = std::min(rmq[2 * pozRMQ + 1], rmq[2 * pozRMQ + 2]);
}
if (i >= mij)
{
inserareRMQ(mij + 1, dr, 2 * pozRMQ + 2);
rmq[pozRMQ] = std::min(rmq[2 * pozRMQ + 1], rmq[2 * pozRMQ + 2]);
}
}
int minRMQ(int stg, int dr, int pozRMQ)
{
if (x <= stg && y >= dr)
return rmq[pozRMQ];
if (x > dr || y < stg)
return 100001;
int mij = stg + (dr - stg) / 2;
return std::min(minRMQ(stg, mij, 2 * pozRMQ + 1), minRMQ(mij + 1, dr, 2 * pozRMQ + 2));
}
int main()
{
in >> n >> m;
for (i = 0; i < n; i++)
{
in >> x;
inserareRMQ(0, n - 1, 0);
}
for (i = 0; i < m; i++)
{
in >> x >> y;
x--;
y--;
out << minRMQ(0, n - 1, 0) << '\n';
}
/*for (i = 0; i < 2 * n - 1; i++)
out << rmq[i] << ' ';*/
return 0;
}