线段树+并查集,对于每个操作我们只需要维护他在自己子树中的最值和在整个树里的最值,类似于线段树动态开点. #include<bits/stdc++.h> using namespace std; ; ,f[N],a[N],ans[N*]; struct node { int lz,mx,l,r; }t[N*]; int size[N],rt[N]; ]; inline int get(int x){return x==f[x]?x:f[x]=get(f[x]);} void pushdown(…