#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
const int N = (int)1e6 + 5; int n, m;
struct Q{
int type, id;
long long val;
friend bool operator < (Q x, Q y){
return x.id == y.id ? x.type < y.type : x.id < y.id;
}
}q[N], tmp[N];
int qsize;
long long ans[N];
int asize; void cdq(int l, int r){//左闭右开
if(r - l <= 1) return ;//长度为1的区间内部就不会有贡献了
int mid = l + ((r - l) >> 1);
cdq(l, mid); cdq(mid, r);
long long sum = 0;
int i = l, j = mid, tsize = 0;
//合并并计算左区间对右区间贡献
while(i < mid && j < r){
if(q[i] < q[j]){
if(q[i].type == 1) sum += q[i].val;
tmp[++tsize] = q[i++];
}
else {
if(q[j].type == 2) ans[q[j].val] -= sum;
else if(q[j].type == 3) ans[q[j].val] += sum;
tmp[++tsize] = q[j++];
}
}
while(i < mid) tmp[++tsize] = q[i++];
while(j < r){
if(q[j].type == 2) ans[q[j].val] -= sum;
else if(q[j].type == 3) ans[q[j].val] += sum;
tmp[++tsize] = q[j++];
}
for(int i = 1; i <= tsize; ++i) q[l + i - 1] = tmp[i];
} /*
这部分的思路总结 判断是否到边界
下方左右分治
计算左边对右边的贡献
把左右类似归并排序重排 */ int main() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i){
++qsize;
q[qsize].id = i, q[qsize].type = 1;
scanf("%lld", &q[qsize].val);
}
for(int i = 1; i <= m; ++i){
scanf("%d", &q[++qsize].type);
if(q[qsize].type == 1){
scanf("%d%lld", &q[qsize].id, &q[qsize].val);
}
else {
int l, r; scanf("%d%d", &l, &r);
++asize;
q[qsize].id = l - 1, q[qsize].val = asize;
q[++qsize].id = r, q[qsize].type = 3, q[qsize].val = asize;
}
}
cdq(1, qsize + 1);
for(int i = 1; i <= asize; ++i) printf("%lld\n", ans[i]);
return 0;
}

最新文章

  1. 查看当前正在运行的activity
  2. EMC Documentum DQL整理(一)
  3. HDU4930 Fighting the Landlords 模拟
  4. 【笔记】DOM探索基础篇(二)
  5. 由DataGridTextColumn不能获取到父级DataContext引发的思考
  6. dojo使用疑难杂症集锦
  7. JDBC数据更新
  8. 个人分享:平时开发中感觉几款不错 IDE 、插件、工具
  9. 【转】java jawin api 中文 invoke方法
  10. 为 Devops 和系统管理员提供的 400+ 免费资源
  11. 64位操作系统下用Microsoft.Jet.OLEDB.4.0出现未注册错误
  12. python打印表格式数据,留出正确的空格和段落星号或注释
  13. python+requests+unittest API接口测试
  14. 从Javascript单线程谈Event Loop
  15. Codeforces Beta Round #1 A,B,C
  16. 多Region下HBase写入问题
  17. Java 读书笔记 (十五) Java 异常处理
  18. Parameter &#39;ids&#39; not found. Available parameters are [array]
  19. Jquery.Datatable 控件后端分页实例 (后台使用ashx、aspx-webmethod)
  20. Ubuntu安装Sqlite报错:No module named &#39;ConfigParser&#39;

热门文章

  1. jQuery中.html(“xxx”)和.append(&quot;xxx&quot;)有什么区别
  2. java 工具
  3. css 别人找的css特效
  4. js获取数组中相同元素数量
  5. vue-cli3.0之vue.config.js的配置项(注解)
  6. redis 的简单命令
  7. python爬虫之win7Mongod安装使用
  8. mysql数据库修改数据表引擎的方法
  9. 【转】MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题)
  10. django_filter,Search_Filter,Order_Filter,分页