2021.08.09 P4868 Preprefix sum(树状数组)
2021.08.09 P4868 Preprefix sum(树状数组)
P4868 Preprefix sum - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:
前缀和(prefix sum):
\]
前前缀和(preprefix sum) 则把S_i作为原序列再进行前缀和。记再次求得前缀和第i个是SS_i
给一个长度n的序列a1,a2,⋯,a**n*,有两种操作:
Modify i x:把a_i改成x;Query i:查询SS_i
思路一:
分析:
先假设所有query的i均为n,则add(1,i,(n+1-i)*a[i])。
当n!=i时,减去多算的部分(n-x)*(a[1],a[2],a[3],…,a[i])。
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
typedef long long ll;
const int N=1e5+10;
int n,m,a[N];
ll t[2][N];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int lowbit(int x){
return x&-x;
}
void add(int flag,int x,int k){
for(int i=x;i<=n;i+=lowbit(i))t[flag][i]+=k;
}
void query(int x,int cha){
ll ans=0;
for(int i=x;i;i-=lowbit(i))ans+=t[1][i],ans-=cha*t[0][i];
//for(int i=x;i;i-=lowbit(i))ans-=cha*t[0][i];
cout<<ans<<endl;
}
signed main(){
n=read();m=read();
for(int i=1;i<=n;i++){
a[i]=read();
add(0,i,a[i]);
add(1,i,(n+1-i)*a[i]);
}
/*for(int i=1;i<=8;i++)cout<<t[0][i]<<" ";cout<<endl;
for(int i=1;i<=8;i++)cout<<t[1][i]<<" ";cout<<endl;
cout<<endl;*/
for(int i=1;i<=m;i++){
string s;
cin>>s;
if(s[0]=='Q'){
int x=read();
//cout<<"ans ";//
query(x,n-x);
}else if(s[0]=='M'){
int u,v;
u=read();v=read();
add(0,u,v-a[u]);
add(1,u,(n+1-u)*(v-a[u]));
a[u]=v;
}
/*for(int i=1;i<=8;i++)cout<<t[0][i]<<" ";cout<<endl;
for(int i=1;i<=8;i++)cout<<t[1][i]<<" ";cout<<endl;
cout<<endl;*/
}
return 0;
}
思路二:
分析:
当query为x时,
\]
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
typedef long long ll;
const int N=1e5+10;
int n,m,a[N];
ll t[2][N];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int lowbit(int x){
return x&-x;
}
void add(int flag,int x,int k){
for(int i=x;i<=n;i+=lowbit(i))t[flag][i]+=k;
}
void query(int x){
ll ans=0;
for(int i=x;i;i-=lowbit(i))ans-=t[1][i],ans+=(x+1)*t[0][i];
//for(int i=x;i;i-=lowbit(i))ans-=cha*t[0][i];
cout<<ans<<endl;
}
signed main(){
n=read();m=read();
for(int i=1;i<=n;i++){
a[i]=read();
add(0,i,a[i]);
add(1,i,i*a[i]);
}
/*for(int i=1;i<=8;i++)cout<<t[0][i]<<" ";cout<<endl;
for(int i=1;i<=8;i++)cout<<t[1][i]<<" ";cout<<endl;
cout<<endl;*/
for(int i=1;i<=m;i++){
string s;
cin>>s;
if(s[0]=='Q'){
int x=read();
//cout<<"ans ";//
query(x);
}else if(s[0]=='M'){
int u,v;
u=read();v=read();
add(0,u,v-a[u]);
add(1,u,u*(v-a[u]));
a[u]=v;
}
/*for(int i=1;i<=8;i++)cout<<t[0][i]<<" ";cout<<endl;
for(int i=1;i<=8;i++)cout<<t[1][i]<<" ";cout<<endl;
cout<<endl;*/
}
return 0;
}
2021.08.09 P4868 Preprefix sum(树状数组)的更多相关文章
- [bzoj3155]Preprefix sum(树状数组)
3155: Preprefix sum Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 1183 Solved: 546[Submit][Status] ...
- codeforces 703D D. Mishka and Interesting sum(树状数组)
题目链接: D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megaby ...
- Codeforces Round #365 (Div. 2) D.Mishka and Interesting sum 树状数组+离线
D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...
- 2018.10.08 NOIP模拟 栅栏(树状数组+rand)
传送门 今天的送分题. 首先考虑每次给要围上栅栏的矩阵里的整体加上1,如果栅栏被撤销就整体减1,最后比较两个点的值是否相同来进行判断. 然而这样的效果并不理想,很容易卡掉. 进一步思考,我们第iii次 ...
- hdu3015,poj1990树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3015 题意:给定n组数,每组数有值x和值h,求n组数两两的val的总和.将所有x和所有h分别离散化(不 ...
- 树状数组+二维前缀和(A.The beautiful values of the palace)--The Preliminary Contest for ICPC Asia Nanjing 2019
题意: 给你螺旋型的矩阵,告诉你那几个点有值,问你某一个矩阵区间的和是多少. 思路: 以后记住:二维前缀和sort+树状数组就行了!!!. #define IOS ios_base::sync_wit ...
- hdu 2838 Cow Sorting 树状数组求所有比x小的数的个数
Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 2021.08.09 P6225 抑或橙子(树状数组)
2021.08.09 P6225 抑或橙子(树状数组) 重点: 1.异或用法 题意: Janez 喜欢橙子!他制造了一个橙子扫描仪,但是这个扫描仪对于扫描的每个橙子的图像只能输出一个 3232 位整数 ...
- 差分+树状数组【p4868】Preprefix sum
Description 前缀和(prefix sum)\(S_i=\sum_{k=1}^i a_i\). 前前缀和(preprefix sum) 则把\(S_i\)作为原序列再进行前缀和.记再次求得前 ...
随机推荐
- 远程调用NFS超时,服务卡死
远程调用NFS超时,服务卡死 如何查看进程中使用了哪些文件句柄?
- 半吊子菜鸟学Web开发 -- PHP学习5-数据库
数据库 1 进行数据库操作的步骤 连接数据库 mysqli_connect 选择数据库 mysqli_select_db 设置文件编码 mysqli_query("set name utf- ...
- Gradle Gretty进行runAppDebug的Listening for transport dt_socket at address: 5005 的后续配置
出现 Listening for transport dt_socket at address: 5005:代表debug端口已启动好了,接下来你需要进行配置远程Debug,进行附加Debug进程: ...
- Java并发机制(2)--synchronized与Lock
本内容整理自:博客园-海 子-java并发编程系列-http://www.cnblogs.com/dolphin0520/category/602384.html 1.基础: 1.什么时候出现线程安全 ...
- 模糊查询like语句该怎么写?
第1种:在Java代码中添加sql通配符. string wildcardname = "%smi%"; list<name> names = mapper.selec ...
- 什么是Spring MVC框架的控制器?
控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现.控制器解析用户输入并将其转换为一个由视图呈现给用户的模型.Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器.
- 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动 的区别在哪里?
Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联 集合对象时,可以根据对象关系模型直接获取,所以它是全自动的.而 Mybatis 在查询关联对象或关联集 ...
- glusterfs架构和原理
分布式存储已经研究很多年,但直到近年来,伴随着谷歌.亚马逊和阿里等互联网公司云计算和大数据应用的兴起,它才大规模应用到工程实践中.如谷歌的分布式文件系统GFS.分布式表格系统google Bigtab ...
- IdentityServer4系列 | 混合模式
一.前言 在上一篇关于授权码模式中, 已经介绍了关于授权码的基本内容,认识到这是一个拥有更为安全的机制,但这个仍然存在局限,虽然在文中我们说到通过后端的方式去获取token,这种由web服务器和授权服 ...
- 巧用CSS3:target 伪类制作Dropdown下拉菜单(无JS)
原文链接:http://devework.com/css3-target-dropdown.html :target 是CSS3 中新增的一个伪类,用以匹配当前页面的URI中某个标志符的目标元素(比如 ...