模板水题,套模板。。。
#include <iostream>
#include <cstdio>
const int MAX = 1e5 + 5;
int arr[5 * MAX];
int num;
void update(int st, int ed, int id, int pos, int val)
{
if (st == pos && pos == ed)
{
arr[id] = val;
return ;
}
int m = (st + ed) >> 1;
int l = id << 1, r = l | 1;
if (pos <= m)
update(st, m, l, pos, val);
else
update(m + 1, ed, r, pos, val);
arr[id] = std::min(arr[l], arr[r]);
}
int query(int st, int ed, int id, int q_st, int q_ed)
{
if (q_st == st && q_ed == ed)
return arr[id];
int l = id << 1, r = l | 1;
int m = (st + ed) >> 1;
//std::cout << "zz" << std::endl;
if (q_ed <= m)
return query(st, m, l, q_st, q_ed);
else if (q_st > m)
return query(m + 1, ed, r, q_st, q_ed);
else
return std::min(query(st, m, l, q_st, m), query(m + 1, ed, r, m + 1, q_ed));
}
int main()
{
std::ios::sync_with_stdio(false);
int t, cas = 0;
scanf("%d", &t);
while (t--)
{
int q;
scanf("%d%d", &num, &q);
int tmp;
for (int i = 1; i <= num; ++i)
{
scanf("%d", &tmp);
update(1, num, 1, i, tmp);
}
int t1, t2;
printf("Case %d:\n", ++cas);
for (int i = 0; i != q; ++i)
{
scanf("%d%d", &t1, &t2);
printf("%d\n", query(1, num, 1, t1, t2));
}
}
return 0;
}