传送门

线段树入门操作。

直接把题目给的(r−i+1)∗a[i](r-i+1)*a[i](r−i+1)∗a[i]拆开变成(r+1)∗1∗a[i]−i∗a[i](r+1)*1*a[i]-i*a[i](r+1)∗1∗a[i]−i∗a[i]因此只需要维护∑i=lra[i]\sum _{i=l} ^r a[i]∑i=lr​a[i]和∑i=lri∗a[i]\sum _{i=l} ^r i*a[i]∑i=lr​i∗a[i]就行了。

代码:

  1. #include<bits/stdc++.h>
  2. #define N 100005
  3. #define lc (p<<1)
  4. #define rc (p<<1|1)
  5. #define mid (T[p].l+T[p].r>>1)
  6. #define ll long long
  7. using namespace std;
  8. inline ll read(){
  9. ll ans=0,w=1;
  10. char ch=getchar();
  11. while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
  12. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  13. return ans*w;
  14. }
  15. int n,m;
  16. ll sum[N],a[N];
  17. struct Node{int l,r;ll sum1,sum2;}T[N<<1];
  18. inline void pushup(int p){T[p].sum1=T[lc].sum1+T[rc].sum1,T[p].sum2=T[lc].sum2+T[rc].sum2;}
  19. inline void build(int p,int l,int r){
  20. T[p].l=l,T[p].r=r;
  21. if(l==r){T[p].sum1=a[l],T[p].sum2=T[p].l*a[l];return;}
  22. build(lc,l,mid),build(rc,mid+1,r),pushup(p);
  23. }
  24. inline void update(int p,int k,ll v){
  25. if(T[p].l==T[p].r){
  26. T[p].sum1+=v;
  27. T[p].sum2+=T[p].l*v;
  28. return;
  29. }
  30. if(k<=mid)update(lc,k,v);
  31. else update(rc,k,v);
  32. pushup(p);
  33. }
  34. inline pair<ll,ll>query(int p,int ql,int qr){
  35. if(ql<=T[p].l&&T[p].r<=qr)return make_pair(T[p].sum1,T[p].sum2);
  36. if(qr<=mid)return query(lc,ql,qr);
  37. if(ql>mid)return query(rc,ql,qr);
  38. pair<ll,ll>ret1=query(lc,ql,mid),ret2=query(rc,mid+1,qr);
  39. return make_pair(ret1.first+ret2.first,ret1.second+ret2.second);
  40. }
  41. int main(){
  42. freopen("overwatch.in","r",stdin);
  43. freopen("overwatch.out","w",stdout);
  44. n=read(),m=read();
  45. for(int i=1;i<=n;++i)sum[i]=sum[i-1]+i,a[i]=read();
  46. build(1,1,n);
  47. while(m--){
  48. int op=read(),x=read();
  49. if(op==1)update(1,x,read());
  50. else{
  51. int y=read();
  52. pair<ll,ll>ret=query(1,x,y);
  53. ll ans=ret.first*(y+1)-ret.second;
  54. printf("%lld\n",ans);
  55. }
  56. }
  57. return 0;
  58. }

2018.10.22 cogs2471. [EZOI 2016]源氏的数学课(线段树)的更多相关文章

  1. 2018.07.30 cogs2632. [HZOI 2016] 数列操作d(线段树)

    传送门 线段树基本操作 区间加等差数列,维护区间和. 对于每个区间维护等差数列首项和公差,易证这两个东西都是可合并的,然后使用小学奥数的知识就可以切掉这题. 代码: #include<bits/ ...

  2. 2018.10.18 NOIP训练 ZUA球困难综合征(线段树)

    传送门 考虑到模数等于7 * 13 * 17 * 19. 那么只需要维护四棵线段树求出每个数处理之后模7,13,17,197,13,17,197,13,17,19的值再用crtcrtcrt合并就行了. ...

  3. 2018.08.04 cogs2633. [HZOI 2016]数列操作e(线段树)

    传送门 支持区间加w(i−ql+1)2" role="presentation" style="position: relative;">w(i ...

  4. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status ...

  5. BZOJ 4408: [Fjoi 2016]神秘数 可持久化线段树

    4408: [Fjoi 2016]神秘数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4408 Description 一个可重复数字集 ...

  6. 2018.07.23 codeforces 438D. The Child and Sequence(线段树)

    传送门 线段树维护区间取模,单点修改,区间求和. 这题老套路了,对一个数来说,每次取模至少让它减少一半,这样每次单点修改对时间复杂度的贡献就是一个log" role="presen ...

  7. 2018.07.23 洛谷P4097 [HEOI2013]Segment(李超线段树)

    传送门 给出一个二维平面,给出若干根线段,求出x" role="presentation" style="position: relative;"&g ...

  8. 8VC Venture Cup 2016 - Elimination Round G. Raffles 线段树

    G. Raffles 题目连接: http://www.codeforces.com/contest/626/problem/G Description Johnny is at a carnival ...

  9. NOIP模拟赛-2018.10.22

    模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...

随机推荐

  1. jdk配置(备份)

    #####set java environment #export JAVA_HOME=/usr/java/jdk1..0_172 #export JRE_HOME=${JAVA_HOME}/jre ...

  2. jpa 一对一

    实体   Manager package entity; import javax.persistence.Column; import javax.persistence.Entity; impor ...

  3. HTML5 Canvas ( 图形的像素操作 ) getImageData, putImageData, ImgData.data

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. HTTP状态码 解析

    原文地址:HTTP状态码:400500错误代码(个人总结)作者:lining2008net 一些常见的状态码为: 200-服务器成功返回网页 404-请求的网页不存在 503-服务不可用 详细分解: ...

  5. linux——DNS服务器配置

    讲课,请不要在课堂上查找文件,浏览器搜索,会感觉你很不上心,玩听众,一定提前做很多遍,模拟很多遍: 演讲,请务必准备好材料,考虑听众的感受,一定不要让外行人云里雾里,听不懂你在讲什么,那就尴尬了, D ...

  6. Java 枚举那点事

    目录 最近有需求,想存自定义的枚举值,比如 HOTLINE("Hotline") 我想存 Hotline 于是研究了一下Java的枚举问题 如下数据库的Entity (贫血模型哈) ...

  7. GitLab CI 之 Java HelloWrold

    问题描述 测试人员想在gitalb上跑 JUnit项目,也就是java代码. 听到这个之后,我当时都懵了,我他妈gitlab的runner是为运行.net core 安装的呀.后来一想,是我错了,我用 ...

  8. 关于frameset与iframe的使用

    <frameset>与<body>标签同级,是不能同时存在的,<frameset>是把当前页面进行分割. frameset.html: <!DOCTYPE h ...

  9. express.Router

    [express.Router] 1.可使用 express.Router 类创建模块化.可挂载的路由句柄.Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”. 下 ...

  10. sql server 数据库学习

    http://m.blog.csdn.net/anxpp/article/details/51295020