当前等级为\(x\)的魔法书会对等级在\([x,inf]\)的所有人造成\(y\)的影响
所以除了求平均值之外 就是区间修改区间求和
需要使用动态开点 + 标记永久化
需要注意的是 当前点为空的话 需要返回 目标区间长度*下放标记值
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long #define inf 0x7fffffff #define N 200080 #define IL inline #define M 10008611 #define D double #define R register using namespace std; templateIL void read(T &_) { T __=0,___=1;char ____=getchar(); while(!isdigit(____)) {if(____=='-') ___=0;____=getchar();} while(isdigit(____)) {__=(__<<1)+(__<<3)+____-'0';____=getchar();} _=___ ? __:-__; } /*-------------OI使我快乐-------------*/ ll n,m,root,tot,maxn; struct Node{ ll tag,sum; Node(){tag=sum=0;} }tre[M]; struct Qury{ ll knd,x,y; }e[N]; ll lson[M],rson[M]; IL void update(ll &now,ll lenow,ll rinow,ll le,ll ri,ll d) { if(!now) now=++tot;tre[now].sum+=(ri-le+1)*d; if(lenow==le&&rinow==ri) { tre[now].tag+=d;return; } ll mid=(lenow+rinow)>>1; if(ri<=mid) update(lson[now],lenow,mid,le,ri,d); else if(mid>1; if(ri<=mid) return qury(lson[now],lenow,mid,le,ri,have+tre[now].tag); else if(mid