和sdoi的相关分析很像qwq,推柿子然后线段树搞搞

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int n, m, uu, vv, ww;
ll que[3];
char ss[15];
struct SGT{
ll sum[400005][3], tag[400005];
//sum[0]: \sum w_i i, sum[1]: \sum w_i i^2, sum[2]: \sum w_i
void pushDown(int o, int l, int r, int lson, int rson, int mid){
tag[lson] += tag[o];
tag[rson] += tag[o];
sum[lson][0] += (ll)tag[o]*(mid-l+1)*(l+mid)/2;
sum[lson][1] += (ll)tag[o]*((ll)mid*(mid+1)*(2*mid+1)/6-(ll)(l-1)*l*(2*l-1)/6);
sum[lson][2] += (ll)tag[o]*(mid-l+1);
sum[rson][0] += (ll)tag[o]*(r-mid)*(mid+1+r)/2;
sum[rson][1] += (ll)tag[o]*((ll)r*(r+1)*(2*r+1)/6-(ll)mid*(mid+1)*(2*mid+1)/6);
sum[rson][2] += (ll)tag[o]*(r-mid);
tag[o] = 0;
}
void update(int o, int l, int r, int x, int y, int k){
if(l>=x && r<=y){
sum[o][0] += (ll)k*(r-l+1)*(l+r)/2;
sum[o][1] += (ll)k*((ll)r*(r+1)*(2*r+1)/6-(ll)(l-1)*l*(2*l-1)/6);
sum[o][2] += (ll)k*(r-l+1);
tag[o] += k;
}
else{
int mid=(l+r)>>1;
int lson=o<<1;
int rson=lson|1;
if(tag[o]) pushDown(o, l, r, lson, rson, mid);
if(x<=mid) update(lson, l, mid, x, y, k);
if(mid<y) update(rson, mid+1, r, x, y, k);
for(int i=0; i<3; i++)
sum[o][i] = sum[lson][i] + sum[rson][i];
}
}
void query(int o, int l, int r, int x, int y){
if(l>=x && r<=y)
for(int i=0; i<3; i++)
que[i] += sum[o][i];
else{
int mid=(l+r)>>1;
int lson=o<<1;
int rson=lson|1;
if(tag[o]) pushDown(o, l, r, lson, rson, mid);
if(x<=mid) query(lson, l, mid, x, y);
if(mid<y) query(rson, mid+1, r, x, y);
}
}
}sgt;
ll gcd(ll a, ll b){
return !b?a:gcd(b, a%b);
}
int main(){
cin>>n>>m;
while(m--){
scanf("%s", ss);
if(ss[0]=='C'){
scanf("%d %d %d", &uu, &vv, &ww);
vv--;
sgt.update(1, 1, n, uu, vv, ww);
sgt.query(1, 1, n, 1, 1);
}
else{
scanf("%d %d", &uu, &vv);
que[0] = que[1] = que[2] = 0;
ll fm=(ll)(vv-uu+1)*(vv-uu)/2;
vv--;
sgt.query(1, 1, n, uu, vv);
ll ans=(ll)(uu+vv)*que[0]-que[1]+(ll)(vv+1)*(1-uu)*que[2];
ll f=gcd(ans, fm);
printf("%lld/%lld\n", ans/f, fm/f);
}
} return 0;
}

最新文章

  1. PHP使用JSON通信
  2. Ubuntu环境搭建系列—WPS/LAMP/Python篇
  3. NHibernate 3.2+的 Map by Code 实例
  4. Android--应用开发1(应用程序框架)
  5. SQL:多表关联采取这一纪录迄今为止最大
  6. Syslog4j如何实现接收日志
  7. mybatis入门-第一个程序
  8. swing-窗体添加背景图片的2种方法
  9. gunicorn+anaconda+nginx部署django项目(ubuntu)
  10. MVC设计模式的简单理解
  11. 【读书笔记】iOS-解析JSON
  12. 20个Linux防火墙[iptables]应用技巧[转]
  13. 条理清晰的搭建SSH环境之整合Hibernate和Spring
  14. python之递归锁【Rlock】
  15. AVL树C++实现
  16. wubi.exe的工作原理
  17. weex入门篇
  18. linux的MySQL设为开机启动
  19. No.3一步步学习vuejs之计算属性和观察者
  20. windows 下配置浏览器使用 kerberos

热门文章

  1. strdup和strndup函数
  2. Java实习问题记录
  3. Spark远程调试函数
  4. 单步调试理解webpack里通过require加载nodejs原生模块实现原理
  5. 如何在win10中安装ArcGIS10.2
  6. Java解析html页面,获取想要的元素
  7. 【HHHOJ】ZJOI2019模拟赛(十五)03.17 解题报告
  8. 课程设计__C++初步,C++对C的扩充
  9. 2017.10.28 针对Java Web应用中错误异常处理方法的运用
  10. c#按钮如何避免重复点击后报错