http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=14607

题意:题目给你n个数,m个操作,接下来一行给你这n个数,接下的几行给出m个操作,Q a b 表示查询区间[a,b]里的数和和。U a b c 表示把区间[a,b]里的数都加上c。

思路:延迟标记,和hdu4107是同一种类型的,这是4107的解题过程http://www.cnblogs.com/ziyi--caolu/archive/2012/12/25/2832368.html

反思:在解题过程中,有些地方没有思考清楚,费了好多时间。比如再往下更新的时候,要和与要加的数一起更新,一开始,我是想成,只更新add,在最后求和的时候,再将add加上,结果这样是错的........

#include<iostream>
using namespace std;
#define N 100005
typedef __int64 ss;
struct
{int l,r;ss sum,add;
}tree[N*4];
ss a[N];
void creat(int i,int l,int r)
{int mid=(l+r)/2;tree[i].l=l;tree[i].r=r;tree[i].sum=tree[i].add=0;if(l==r){tree[i].sum=a[l];return ;}creat(i*2,l,mid);creat(i*2+1,mid+1,r);tree[i].sum=tree[i*2].sum+tree[i*2+1].sum;
}
void updata(int i,int l,int r,int c)
{if(l<=tree[i].l&&tree[i].r<=r){tree[i].add+=c;tree[i].sum+=c*(tree[i].r-tree[i].l+1);return;}if(tree[i].add!=0){tree[i*2].add+=tree[i].add;tree[i*2+1].add+=tree[i].add;tree[i*2].sum+=tree[i].add*(tree[i*2].r-tree[i*2].l+1);tree[i*2+1].sum+=tree[i].add*(tree[i*2+1].r-tree[i*2+1].l+1);tree[i].add=0;}int mid=(tree[i].l+tree[i].r)/2;if(mid>=l)updata(i*2,l,r,c);if(mid<r)updata(i*2+1,l,r,c);tree[i].sum=tree[i*2].sum+tree[i*2+1].sum;
}
ss getsum(int i,int l,int r)
{if(tree[i].l>=l&&tree[i].r<=r){return tree[i].sum;}if(tree[i].add!=0){tree[i*2].add+=tree[i].add;tree[i*2+1].add+=tree[i].add;tree[i*2].sum+=tree[i].add*(tree[i*2].r-tree[i*2].l+1);tree[i*2+1].sum+=tree[i].add*(tree[i*2+1].r-tree[i*2+1].l+1);tree[i].add=0;}int mid=(tree[i].l+tree[i].r)/2;ss sum1=0,sum2=0;if(mid>=l)sum1=getsum(i*2,l,r);if(mid<r)sum2=getsum(i*2+1,l,r);return sum1+sum2;
}
int main()
{int n,q;while(scanf("%d %d",&n,&q)>0){int i;for(i=1;i<=n;i++)scanf("%I64d",&a[i]);creat(1,1,n);while(q--){char t[10];scanf("%s",t);if(t[0]=='Q'){int l,r;scanf("%d%d",&l,&r);printf("%I64d\n",getsum(1,l,r));}else{int l,r,c;scanf("%d%d%d",&l,&r,&c);updata(1,l,r,c);}}}return 0;
}

poj3468 A Simple Problem with Integers相关推荐

  1. POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】

    用longlong替换__int64也成. #define LL long long 输入输出用%lld Problem: 3468   User: qq1203456195 Memory: 4284 ...

  2. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  3. poj 3243:A Simple Problem with Integers

    3243:A Simple Problem with Integers 查看 提交 统计 提示 提问 总时间限制:  5000ms  单个测试点时间限制:  2000ms  内存限制:  131072 ...

  4. (线段树模板)A Simple Problem with Integers --POJ--3468

    链接: http://poj.org/problem?id=3468 代码: 1 #include<stdio.h> 2 #include<algorithm> 3 #incl ...

  5. 【poj3468】A Simple Problem with Integers

    题面 You have N integers, A1, A2, - , AN. You need to deal with two kinds of operations. One type of o ...

  6. 2019_GDUT_新生专题V算法优化 B. A Simple Problem with Integers POJ 3468

    来源 POJ3468 题目: You have N integers, A1, A2, - , AN. You need to deal with two kinds of operations. O ...

  7. A Simple Problem with Integers

    http://poj.org/problem?id=3468 http://acm.hdu.edu.cn/showproblem.php?pid=4267 C++版本一 /* *@Author: ST ...

  8. poj 3468 A Simple Problem with Integers(线段树区区)

    题目链接:  http://poj.org/problem?id=3468 题目大意:  给出N个数,和M次查询 C a b c  区间[a,b]的值都加上c Q a b     查询区间[a,b]值 ...

  9. A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)

    题意: 有一个数组,有两种操作.1: Q a b 求[a,b]的和 2:C a b c 给[a,b] 的所有元素都加上c. 题目: You have N integers, A1, A2, ... , ...

最新文章

  1. 数据挖掘导论读书笔记10聚类分析续
  2. 多语言软件gettext解决方案weix_图像编辑软件 Aurora HDR 2019 多语言免费版
  3. 计算机基础教育德育教学,【家庭教育论文】计算机基础教学的德育教育(共2650字)...
  4. 基于快速原型模型建立商业呼叫中心SPOMP的应用研究
  5. taro 缺点_Taro小程序富文本解析4种方法
  6. Android 系统性能优化(27)---内存分析工具
  7. [Java] 蓝桥杯ADV-209 算法提高 c++_ch02_04
  8. pcl dll load failed: 找不到指定的模块。_解决cuda10.1+tensorflow-gpu出现“cudart64_100.dll”问题...
  9. springboot项目中使用spring的xml文件
  10. TCPIP协议详解----网络基础知识
  11. 企业微信获取用户php,微信企业号获取用户授权登陆信息
  12. typedef 定义结构体说明
  13. wps插入尾注(罗马数字变阿拉伯数字,即i变1)的操作方法
  14. DEBUG指示灯详细说明
  15. 学习批处理之安装一键装机必备软件
  16. SqlServer 数据库修复
  17. [海思]--Hi3516a--GPIO(用户层)
  18. 嵌入式软件面试问题总结
  19. 远程桌面连接:提示出现身份验证错误,要求的函数不受支持。这可能是由于CredSSP加密数据库修正错误。
  20. C++ builder 编译加速问题

热门文章

  1. 03基于python玩转人工智能最火框架之TensorFlow介绍
  2. ROS中base_link, odom, fixed_frame, target_frame和虚拟大地图map的关系
  3. Linux-find命令应用举例-按时间筛选和删除文件
  4. Ubuntu Server 12.04下cobbler + dnsmasq +tftpd-hpa的安装配置(四)
  5. Docker 安装registry (构建私有镜像库)
  6. nodejs、gulp调试工具node-inspector使用
  7. RabbitMQ入门(4)--路由
  8. 目录树结构改变后刷新目录树
  9. 方案里最常用的集群拓扑图(包含:多机集群、负载均衡、双机)
  10. 如何成为软件工程师的团队合作者