LG3374 【模板】树状数组 1
题意
如题,已知一个数列,你需要进行下面两种操作:
- 将某一个数加上x
- 求出某区间每一个数的和
对于100%的数据:N<=500000,M<=500000
分析
cdq分治解决,参照mlystdcall的讲解。
时间复杂度\(O((N+M) \log_2 (N+M))\)
代码
#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<typename T>il T read()
{
rg T data=0,w=1;
rg char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-') w=-1;
ch=getchar();
}
while(isdigit(ch))
{
data=data*10+ch-'0';
ch=getchar();
}
return data*w;
}
template<typename T>il T read(rg T&x)
{
return x=read<T>();
}
typedef long long ll;
co int MAXN=5e5+1,MAXM=5e5+1,MAXQ=MAXN+MAXM*2;
struct Query
{
int type,idx;
ll val;
bool operator<(co Query&x)co
{
return idx^x.idx?idx<x.idx:type<x.type;
}
}query[MAXQ],tmp[MAXQ];
ll ans[MAXQ];
int qidx=0,aidx=0;
void cdq(int L,int R) // [L,R)
{
if(R-L<=1) return;
int M=(L+R)/2;
cdq(L,M),cdq(M,R);
ll sum=0;
int p=L,q=M,o=0;
while(p<M&&q<R)
{
if(query[p]<query[q])
{
if(query[p].type==1) sum+=query[p].val;
tmp[o++]=query[p++];
}
else
{
if(query[q].type==2) ans[query[q].val]-=sum;
else if(query[q].type==3) ans[query[q].val]+=sum;
tmp[o++]=query[q++];
}
}
while(p<M)
tmp[o++]=query[p++];
while(q<R)
{
if(query[q].type==2) ans[query[q].val]-=sum;
else if(query[q].type==3) ans[query[q].val]+=sum;
tmp[o++]=query[q++];
}
std::copy(tmp,tmp+o,query+L);
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int n=read<int>(),m=read<int>();
for(int i=1;i<=n;++i)
query[qidx].idx=i,query[qidx].type=1,query[qidx++].val=read<ll>();
for(int i=0;i<m;++i)
{
read(query[qidx].type);
if(query[qidx].type==1) read(query[qidx].idx),read(query[qidx++].val);
else
{
int l=read<int>(),r=read<int>();
query[qidx].idx=l-1,query[qidx++].val=aidx;
query[qidx].type=3,query[qidx].idx=r,query[qidx++].val=aidx++;
}
}
cdq(0,qidx);
for(int i=0;i<aidx;++i)
printf("%lld\n",ans[i]);
return 0;
}
LG3374 【模板】树状数组 1的更多相关文章
- [模板] 树状数组 (C++ class)
闲来无事(其实是打了两三道树状数组题),写了个树状数组模板…… /* Author: hotwords */ template<typename tp> class BinTree { p ...
- HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...
- 【洛谷 p3374】模板-树状数组 1(数据结构)
题目:已知一个数列,你需要进行下面两种操作:1.将某一个数加上x:2.求出某区间每一个数的和. 解法:树状数组求前缀和. #include<cstdio> #include<cstd ...
- 【洛谷 p3368】模板-树状数组 2(数据结构)
题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上x:2.求出某一个数的和. 解法:树状数组+前缀和优化.数组中每位存和前一位的数的差,这样区间修改只用改两位,单点询问就是求前缀和 ...
- POJ2299逆序对模板(树状数组)
题目:http://poj.org/problem?id=2299 只能相邻两个交换,所以交换一次只会减少一个逆序对.所以交换次数就是逆序对数. ps:原来树状数组还可以记录后边lowbit位的部分和 ...
- 洛谷.3374.[模板]树状数组1(CDQ分治)
题目链接 简易CDQ分治教程 //每个操作分解为一个有序数对(t,p),即(时间,操作位置),时间默认有序,用CDQ分治处理第二维 //对于位置相同的操作 修改优先于查询 //时间是默认有序的 所以可 ...
- 【poj 3167】Cow Patterns(字符串--KMP匹配+数据结构--树状数组)
题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力. ...
- 洛谷P3368 【模板】树状数组 2
P3368 [模板]树状数组 2 102通过 206提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 如题,已知一个数列,你需要进行下面两 ...
- 洛谷P3374 【模板】树状数组 1
P3374 [模板]树状数组 1 140通过 232提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 题目描述有误 题目描述 如题,已知一个数列,你需要进行下面两 ...
- poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)
/* 树状数组第三种模板(改段求段)不解释! 不明白的点这里:here! */ #include<iostream> #include<cstring> #include< ...
随机推荐
- 防止CSRF的攻击—Origin和Referer
防止CSRF的攻击—Origin和Referer 为了防止CSRF的攻击,我们建议修改浏览器在发送POST请求的时候加上一个Origin字段,这个Origin字段主要是用来标识出最初请求是从哪里发起的 ...
- jQuery鼠标滑动切换焦点图
在线演示 本地下载
- 20145235李涛《网络对抗》Exp8 Web基础
基础问答 什么是表单 可以收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁. 表单包括两个部分:一部分是HTML源代码用于描述表单(例如,域,标签和用户在页面上看见的按钮),另一部分是脚本 ...
- wyx20162314实验报告1
北京电子科技学院BESTI实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 王译潇 学号:20162310 指导教师:娄佳鹏老师.王志强老师 实验日期:2017年3月26号 实验密级: 非 ...
- 关于ARM指令中位置无关和位置相关代码的认识【转】
本文转载自:https://blog.csdn.net/talent_CYJ/article/details/50533153 今天在一个问题上折腾了又是半天.就是在学JZ2440串口通信的时候,在s ...
- hydra简单使用示例
本内容为网上收集整理,仅作为备忘!! hydra简单使用示例: 破解https: # hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https ...
- HDU 1159 Common Subsequence 动态规划
2017-08-06 15:41:04 writer:pprp 刚开始学dp,集训的讲的很难,但是还是得自己看,从简单到难,慢慢来(如果哪里有错误欢迎各位大佬指正) 题意如下: 给两个字符串,找到其中 ...
- java web 实体类生成
工具下载地址:https://download.csdn.net/download/g342105676/10813246
- 基本sql查询语句练习
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 ...
- tomcat_下载
1. http://tomcat.apache.org/ 2. 3.