题目链接


Solution

直接维护一个差分的线段树就好了.

其中线段树的节点代表 \(r\) 比 \(l\) 多多少.

Code

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define mid (l+r)/2
  4. using namespace std;
  5. const int maxn=100008;
  6. ll sgm[maxn*4],lazy[maxn*4];
  7. ll n,w[maxn],m;
  8. void push_down(int node,int l,int r)
  9. {
  10. sgm[node*2]+=lazy[node]*(mid-l+1);
  11. sgm[node*2+1]+=lazy[node]*(r-mid);
  12. lazy[node*2]+=lazy[node];
  13. lazy[node*2+1]+=lazy[node];
  14. lazy[node]=0;
  15. }
  16. void build(int node,int l,int r)
  17. {
  18. if(l==r){sgm[node]=w[l]-w[l-1];return;}
  19. build(node*2,l,mid);
  20. build(node*2+1,mid+1,r);
  21. sgm[node]=sgm[node*2]+sgm[node*2+1];
  22. }
  23. void change(int node,int l,int r,int L,int R,ll v)
  24. {
  25. if(l>R||r<L)return;
  26. if(l>=L&&r<=R)
  27. {lazy[node]+=v; sgm[node]+=(r-l+1)*v;return;}
  28. push_down(node,l,r);
  29. change(node*2,l,mid,L,R,v);
  30. change(node*2+1,mid+1,r,L,R,v);
  31. sgm[node]=sgm[node*2]+sgm[node*2+1];
  32. }
  33. ll query(int node,int l,int r,int L,int R)
  34. {
  35. if(l>R||r<L)return 0;
  36. if(l>=L&&r<=R)
  37. return sgm[node];
  38. push_down(node,l,r);
  39. return query(node*2,l,mid,L,R)+query(node*2+1,mid+1,r,L,R);
  40. }
  41. ll read()
  42. {
  43. char ch=getchar(); ll f=1,w=0;
  44. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  45. while(ch>='0'&&ch<='9'){w=w*10+ch-'0';ch=getchar();}
  46. return f*w;
  47. }
  48. int main()
  49. {
  50. n=read(); m=read();
  51. for(int i=1;i<=n;i++)
  52. w[i]=read();
  53. build(1,1,n);
  54. while(m--)
  55. {
  56. ll opt=read();
  57. ll x,y,v,d;
  58. if(opt==2)
  59. x=read(),
  60. cout<<query(1,1,n,1,x)<<endl;
  61. else
  62. {
  63. x=read(); y=read();
  64. v=read(); d=read();
  65. change(1,1,n,x,x,v);
  66. change(1,1,n,x+1,y,d);
  67. change(1,1,n,y+1,y+1,-(v+(y-x)*d));
  68. }
  69. }
  70. return 0;
  71. }

P1438 无聊的数列 (线段树)的更多相关文章

  1. P1438 无聊的数列 (差分+线段树)

    题目 P1438 无聊的数列 解析: 先考虑修改,用差分的基本思想,左端点加上首项\(k\),修改区间\((l,r]\)内每个数的差分数组都加上公差\(d\),最后的\(r+1\)再减去\(k+(r- ...

  2. [luogu P1438] 无聊的数列

    [luogu P1438] 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个 ...

  3. Luogu P1438无聊的数列

    洛谷 P1438无聊的数列 题目链接 点这里! 题目描述 维护一个数列\(a_i\),支持两种操作: 给出一个长度等于 \(r-l+1\)的等差数列,首项为\(k\) 公差为\(d\) 并将它对应加到 ...

  4. P1438 无聊的数列

    P1438 无聊的数列 链接 分析: 等差数列可加,首项相加,公差相加. 代码: #include<cstdio> #include<algorithm> #include&l ...

  5. 洛谷P1438 无聊的数列 [zkw线段树]

    题目传送门 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]} ...

  6. LUOGU P1438 无聊的数列 (差分+线段树)

    传送门 解题思路 区间加等差数列+单点询问,用差分+线段树解决,线段树里维护的就是差分数组,区间加等差数列相当于在差分序列中l位置处+首项的值,r+1位置处-末项的值,中间加公差的值,然后单点询问就相 ...

  7. 洛谷P1438 无聊的数列 (线段树+差分)

    变了个花样,在l~r区间加上一个等差数列,等差数列的显著特点就是公差d,我们容易想到用线段树维护差分数组,在l位置加上k,在l+1~r位置加上d,最后在r+1位置减去k+(l-r)*d,这样就是在差分 ...

  8. 洛谷 P1438 无聊的数列

    题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 ...

  9. [洛谷P1438] 无聊的数列

    题目类型:差分,线段树 传送门:>Here< 题意:给出一个数列,每次给一个区间对应的加上一个等差数列,并询问某一个元素目前的值. 解题思路 所谓差分,我个人的理解就是用\(O(1)\)的 ...

随机推荐

  1. 【转】IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送

    在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置appl ...

  2. oracle没有监听和监听程序无法找到适用于客户机连接的例程

    1.无监听,可以尝试下以下几种办法: 1)在net manager中重新配置监听.我的net manager监听点开不了,把ADMIN下的listener.ora删掉再去打开试试. 2)cmd中输入n ...

  3. 实验十二 团队作业8:软件测试与Alpha冲刺

    实验十二 团队作业8:软件测试与Alpha冲刺 实验时间 2018-6-13 Deadline: [6.13-6.19]之间任选连续5天的23:00,以团队随笔博文提交时间为准. 评分标准: 按时交 ...

  4. 对O(logN)复杂度的推导

    之前一直对O(logN)这个复杂度如何推导出的存在疑问,这段时间看了一些算法相关的内容,正好看到这个问题,大略研究了一下算是基本解答了我的疑惑:现记录如下 假设有一棵高为H的满二叉树,则它的节点共有N ...

  5. 【SAM】loj#6401. 字符串

    网上有篇题解写的是线段树合并维护求值? 题目描述 有一个只包含小写字母,长度为 $n$ 的字符串 $S$ .有一些字母是好的,剩下的是坏的. 定义一个子串 $S_{l\ldots r}$是好的,当且仅 ...

  6. ccf 201712-4 行车路线(Python实现)

    一.原题 问题描述 试题编号: 201712-4 试题名称: 行车路线 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将 ...

  7. day 35 补充

      MySQL数据库初识   MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集 ...

  8. GoF23种设计模式之行为型模式之策略模式

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1概述           定义一系列算法,把它们一个个都封装起来,并且让它们可以相互 ...

  9. matplotlib学习记录 六

    # 绘制多数据条形图 # 假设你知道了列表a中电影分别在2017-09-14(b_14),2017-09-15(b_15), # 2017-09-16(b_16)三天的票房,为了展示列表中电影本身的票 ...

  10. python3.7 内置函数整理

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 内置函数整理 #abs(x) #返回数字的绝对值. 参数可以是整 ...