Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define mst(A,k) memset(A,k,sizeof(A))#define lo o<<1#define ro o<<1|1const int N = 100005;int n,p[N],set[3*N],add[3*N],sum[3*N];void Build(int s,int t,int o){if(s == t){set[o] = add[o] = 0;sum[o] = p[s];return;}int mid = (s+t)/2;Build(s,mid,lo);Build(mid+1,t,ro);sum[o] = sum[lo] + sum[ro];}void Add(int s,int t,int o,int l,int r,int w){if(l <= s && t <= r){if(set[o]) set[o] += w;else add[o] += w;sum[o] += w*(t-s+1);return;}int mid = (s+t)/2;if(add[o]){if(set[lo]) set[lo] += add[o];