Ryuji is not a good student, and he doesn't want to study. But there are n books he should learn, each book has its knowledge a[i]a[i].

Unfortunately, the longer he learns, the fewer he gets.

That means, if he reads books from ll to rr, he will get a[l] \times L + a[l+1] \times (L-1) + \cdots + a[r-1] \times 2 + a[r]a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r](LL is the length of [ ll, rr ] that equals to r - l + 1r−l+1).

Now Ryuji has qq questions, you should answer him:

11. If the question type is 11, you should answer how much knowledge he will get after he reads books [ ll, rr ].

22. If the question type is 22, Ryuji will change the ith book's knowledge to a new value.

Input

First line contains two integers nn and qq (nn, q \le 100000q≤100000).

The next line contains n integers represent a[i]( a[i] \le 1e9)a[i](a[i]≤1e9) .

Then in next qq line each line contains three integers aa, bb, cc, if a = 1a=1, it means question type is 11, and bb, cc represents [ ll , rr ]. if a = 2a=2 , it means question type is 22 , and bb, cc means Ryuji changes the bth book' knowledge to cc

Output

For each question, output one line with one integer represent the answer.

样例输入复制

5 3
1 2 3 4 5
1 1 3
2 5 0
1 4 5

样例输出复制

10
8

题目来源

ACM-ICPC 2018 徐州赛区网络预赛

题意:两种操作 一种是更新某节点

一种是查询l-r的一个值 这个值的计算公式是:

思路:

看上去就应该是一个线段树 区间查询单点更新

但是对于查询的处理没有那么简单

可以采用前缀和的思想 因为这个公式中的系数是递减的

那么我们在线段树中维护两个值 一个是本身的值 一个是(n-i+1)倍的值

那么我们查询的时候只需要查到倍数之和 减去 本身之和的(n-r)倍就可以了

WA了一会 因为没用long long

还是要注意啊这些细节 虽然单个没有超int 但是相加就会超的


#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<vector>
#include<set>
//#include<bits/stdc++.h>
#define inf 0x7f7f7f7f7f7f7f7f
using namespace std;
typedef long long LL; const int maxn = 1e5 + 10;
LL tree[maxn << 2], treetime[maxn << 2], a[maxn];
int n, q; void pushup(int rt)
{
tree[rt] = tree[rt << 1] + tree[rt << 1 | 1];
treetime[rt] = treetime[rt << 1] + treetime[rt << 1 | 1];
} void build(int rt, int l, int r)
{
if (l == r) {
tree[rt] = a[l];
treetime[rt] = a[l] * (n - l + 1);
return;
}
int m = (l + r) / 2;
build(rt << 1, l, m);
build(rt << 1 | 1, m + 1, r);
pushup(rt);
} void update(int x, LL val, int l, int r, int rt)
{
if (l == r) {
tree[rt] = val;
treetime[rt] = val * (n - l + 1);
return;
}
int m = (l + r) / 2;
if (x <= m) {
update(x, val, l, m, rt << 1);
}
else {
update(x, val, m + 1, r, rt << 1 | 1);
}
pushup(rt);
} LL query(int L, int R, int l, int r, int rt)
{
if (L <= l && R >= r) {
return tree[rt];
}
int m = (l + r) / 2;
LL ans = 0;
if (L <= m) {
ans += query(L, R, l, m, rt << 1);
}
if (R > m) {
ans += query(L, R, m + 1, r, rt << 1 | 1);
}
pushup(rt);
return ans;
} LL querytime(int L, int R, int l, int r, int rt)
{
if (L <= l && R >= r) {
return treetime[rt];
}
int m = (l + r) / 2;
LL ans = 0;
if (L <= m) {
ans += querytime(L, R, l, m, rt << 1);
}
if (R > m) {
ans += querytime(L, R, m + 1, r, rt << 1 | 1);
}
return ans;
} void init()
{
memset(tree, 0, sizeof(tree));
memset(treetime, 0, sizeof(treetime));
} int main()
{
while (scanf("%d%d", &n, &q) != EOF) {
if(n == 0){
while(q--){
int op, l, r;
scanf("%d%d%d", &op, &l, &r);
printf("0\n");
}
continue;
}
init();
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
}
build(1, 1, n); for (int i = 0; i < q; i++) {
int op, l, r;
scanf("%d%d%d", &op, &l, &r);
if (op == 1) {
LL ans = querytime(l, r, 1, n, 1) - (n - r) * query(l, r, 1, n, 1);
printf("%lld\n", ans);
}
else {
update(l, r, 1, n, 1);
}
}
}
return 0;
}

徐州网络赛H-Ryuji doesn't want to study【线段树】的更多相关文章

  1. 2018icpc徐州网络赛-H Ryuji doesn't want to study(线段树)

    题意: 有n个数的一个数组a,有两个操作: 1 l r:查询区间[l,r]内$a[l]*(r-l+1)+a[l+1]*(r-l)+a[l+2]*(r-l-1)+\cdots+a[r-1]*2+a[r] ...

  2. 2018徐州网络赛H. Ryuji doesn't want to study

    题目链接: https://nanti.jisuanke.com/t/31458 题解: 建立两个树状数组,第一个是,a[1]*n+a[2]*(n-1)....+a[n]*1;第二个是正常的a[1], ...

  3. ACM-ICPC 2018 徐州赛区网络预赛H Ryuji doesn't want to study(树状数组)题解

    题意:给你数组a,有两个操作 1 l r,计算l到r的答案:a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r] (L is the length of [ l, r ] that ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study(树状数组)

    Output For each question, output one line with one integer represent the answer. 样例输入 5 3 1 2 3 4 5 ...

  5. 计蒜客 31460 - Ryuji doesn't want to study - [线段树][2018ICPC徐州网络预赛H题]

    题目链接:https://nanti.jisuanke.com/t/31460 Ryuji is not a good student, and he doesn't want to study. B ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study (线段树)

    Ryuji is not a good student, and he doesn't want to study. But there are n books he should learn, ea ...

  7. 南昌网络赛 I. Max answer (单调栈 + 线段树)

    https://nanti.jisuanke.com/t/38228 题意给你一个序列,对于每个连续子区间,有一个价值,等与这个区间和×区间最小值,求所有子区间的最大价值是多少. 分析:我们先用单调栈 ...

  8. ACM-ICPC 2018徐州网络赛-H题 Ryuji doesn't want to study

    死于update的一个long long写成int了 真的不想写过程了 ******** 树状数组,一个平的一个斜着的,怎么斜都行 题库链接:https://nanti.jisuanke.com/t/ ...

  9. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study

    262144K   Ryuji is not a good student, and he doesn't want to study. But there are n books he should ...

  10. ACM-ICPC 2018 徐州赛区网络预赛 H Ryuji doesn't want to study (树状数组差分)

    https://nanti.jisuanke.com/t/31460 题意 两个操作.1:查询区间[l,r]的和,设长度为L=r-l+1, sum=a[l]*L+a[l+1]*(L-1)+...+a[ ...

随机推荐

  1. linux cpio

    在使用bootimg tools压缩和打包android的ramdisk时,用到了cpio命令.所以了解一下用法. 参考 http://man.linuxde.net/cpio http://cn.l ...

  2. C++泛型和算法

    看书的速度终于慢了下来,倒不是难于理解,而是需要理解的东西有点多. 先吐槽下C++Primer这本书,不少地方都是用抽象的语言进行介绍! 拜托,你这是介绍,不是总结! 像容器适配器那里: “本质上,适 ...

  3. Nodejs入门手记 (01):Hello World的WEB程序

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Allong,谢谢! “滚滚长江东逝水,浪花淘尽英雄.是非成败转头空.” - <临江仙·杨慎·明> 很熟悉的旋律,鸡汤了一下:高考是 ...

  4. atitit.javascript调用java in swt attilax 总结

    atitit.javascript调用java in swt attilax 总结 1. BrowserFunction 简单介绍1 1.1. BrowserFunction 能够分为三类: 1 1. ...

  5. u3d性能优化

    原文地址:http://blog.csdn.net/molti/article/details/8520418 性能优化需要从多方面入手,大家在项目中遇到的问题还是很普遍的,欢迎大家补充. 图形方面: ...

  6. Cookie管理工具

    Cookie Editor 是管理 Cookie 的工具,能识别并编辑IE.Firfox.Netscope Cookie 文件,控制个人隐私信息,修改 Cookie 使用期限,删除历史文件,编辑和删除 ...

  7. [BestCoder Round #5] hdu 4956 Poor Hanamichi (数学题)

    Poor Hanamichi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  8. UE4修改自Rama的UDP通信蓝图插件

    UE4.15没有提供蓝图UDP的组件,可以在网上找到一个ID叫Rama写的源代码,我把它封装成插件了(MyUdpPlugin),方便在各个UE4版本工程中使用UDP通信. 使用方式: 1.在自己的工程 ...

  9. js中字符串支持正则表达式的方法

    设一个字符串var myName = "fangming";则支持正则表达式的方法有:split(分割),replace(替换),search(查找),match(元素参数的数组) ...

  10. 初学hadoop,windows下安装

    先bb一下,woc开始使用Cygwin来模拟linux配置hadoop,然后各种错误,找着找着发现原来2.0+的hadoop可以直接在windows下配置.当时真是1w头神兽飞过. 下载hadoop ...