Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <cstdio>#include <cstring>#include <iostream>using namespace std;#define Lson 2 * o, L, M //左儿子,这样写减少了代码量,不易出错#define Rson 2 * o + 1, M + 1, R //ps:开始没有这样写,debug了好久const int MAXM = 3 * 200000 + 10; //结点总数应略小于区间长度的两倍,这里2*却TLE!int maxV[MAXM], num[MAXM];int ql, qr, p, v;int n, m;//向上更新,由 o 的左右儿子更新 ovoid PushUp(int o){maxV[o] = max(maxV[2 * o], maxV[2 * o + 1]);}//建树void Build(int o, int L, int R){if (L == R) maxV[o] = num[L]; //scanf("%d", &maxV[o]); //叶子结点else{int M = (L + R) / 2;Build(Lson); //左子树Build(Rson); //右子树PushUp(o); //更新}}//查询区间ql,qr最大值 o为当前结点编号,L为当前结点左端点,R为右端点int Query(int o, int L, int R)