这个题我之前做过,我在有做一下,wa,re了一下午,我无语了,各种小毛病,我都标记出来了!!!!!!!!!!!!!

#include<iostream>
using namespace std;
struct node
{
 long long left;
 long long right;
 long long sum;
 long long d;
}t[600009];
__int64 a[100005];
char com;
void build(int l,int r,int n)
{
 t[n].left=l;
 t[n].right=r;
 if(l==r)
 {
  t[n].sum=a[l];
  return ;
 }
 long long mid=(l+r)>>1;
 build(l,mid,n*2);
 build(mid+1,r,n*2+1);
 t[n].sum=t[n*2].sum+t[n*2+1].sum;
}
void updata(int l,int r,int n,int v)
{
 if(t[n].left==l&&t[n].right==r)
 {
  t[n].d+=v;
  return ;
 }
 long long mid=(t[n].left+t[n].right)>>1;
 if(mid>=r)
 updata(l,r,n*2,v);//这才是主要移动
 else if(mid<l)//注意不能大于等于有r,l相等情概况
 updata(l,r,n*2+1,v);//这才是主要移动
 else
 {
  updata(l,mid,n*2,v);//用来纠正方向
  updata(mid+1,r,n*2+1,v);
 }
 t[n].sum=t[n*2].sum+(t[n*2].right-t[n*2].left+1)*t[n*2].d;//用来把增加数的线段以上的线段sum值更新,别忘了加一
 t[n].sum+=t[n*2+1].sum+(t[n*2+1].right-t[n*2+1].left+1)*t[n*2+1].d;
}
__int64 query(int l,int r,int n,long long p)
{
 p+=t[n].d;//将寻找线段以上的线段的增加值加在一起
 
 if(t[n].left==l&&t[n].right==r)
 {
  return t[n].sum+(t[n].right-t[n].left+1)*p;
 }
 long long mid=(t[n].left+t[n].right)>>1;//这一个寻找的过程
 if(mid>=r)
 {
  return query(l,r,2*n,p);//system("pause");
 }
 else if(mid<l)
 {
  return query(l,r,n*2+1,p);
 }
 else
 {
  __int64 s1=query(l,mid,n*2,p);//纠正方向
  __int64 s2=query(mid+1,r,n*2+1,p);
  return s1+s2;
 }
 return 0;

int main()
{
 int n,q;
 int a1,b;
 long long c;
 while(cin>>n>>q)
 {
  for(int i=1;i<=n;i++)
  scanf("%I64d",&a[i]);//范围
  build(1,n,1);
  while(q--)
  {
   cin>>com;
   if(com=='Q')
   {
    scanf("%d%d",&a1,&b);
    __int64 t=query(a1,b,1,0);
    printf("%I64d\n",t);
   }
   else
   {
    scanf("%d%d%I64d",&a1,&b,&c);
    updata(a1,b,1,c);   
   }
  }
 }
 return 0;
}

poj 3468 A Simple Problem with Integers 基础线段树相关推荐

  1. POJ 3468 A Simple Problem with Integers(线段树:区间更新)

    http://poj.org/problem?id=3468 题意: 给出一串数,每次在一个区间内增加c,查询[a,b]时输出a.b之间的总和. 思路: 总结一下懒惰标记的用法吧. 比如要对一个区间范 ...

  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 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]值 ...

  4. POJ 3468 A Simple Problem with Integers

    分析:这题wa了好多次(看了下discuss好多人也是这样,好题~).一处是sum值会超int32,要用int64.还有一处是toadd要累加,我不知道是受上一题影响还是怎的..pushdown的时候 ...

  5. 【POJ - 3468 】 A Simple Problem with Integers (线段树模板 区间更新 + 区间和查询)(不能树状数组或差分数组)

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

  6. POJ 3468 A Simple Problem with Integers (1)

    POJ_3468(1) 在消化了PPT上思想之后,又重新做了一下这个题目. 不妨将原数组的元素记作a[i],然后我们用堆建立两棵线段树,一棵的原数组为x[i](x[i]=a[i]-a[i-1],即原数 ...

  7. POJ - 3468 A Simple Problem with Integers(分块)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,再给出 m 次操作,每次操作分为两种情况: C l r d:区间 [ l , r ] 内的数字都加上 d Q l r :查询 [ l , r ...

  8. POJ 3468 A Simple Problem with Integers(线段树区间更新)

    题目链接 这个真费劲...其实我也不懂 为什么...大体思想是,如果把区间更新了,开始的时候只把用懒惰标记标记那个区间,而不更新底层元素,而如果查询的时候顺带着把lz标记给消除...多敲几遍,多调试一 ...

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

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

  10. POJ3468-A Simple Problem with Integers【线段树,树状数组,分块】

    正题 题目链接:我是链接 其实洛谷线段树模板也是一样的:三种方法AC评测链接 题目大意 要求支持区间修改,区间求和. 线段树 直接用一个lazy标记,在之前的博客里有说 code1 #include& ...

最新文章

  1. 收集程序员的几幅对联
  2. 问题 seata_架构设计 | 基于Seata中间件,微服务模式下事务管理
  3. sql 获取第10到20个记录
  4. thinkphp5.0连接mysql_thinkphp5.0数据库操作
  5. 使用openlayers投影阿伯斯(Albers)
  6. PPC手机(WM5)Wifi和GPRS同时使用设置指南
  7. lisp 设计盘形齿轮铣刀_用AutoLISP设计盘形齿轮铣刀渐开线齿形
  8. erp java源代码_erp java
  9. reducer在react使用
  10. vue 网络异常提示
  11. 爬虫到底违法吗?这位爬虫工程师给出了答案
  12. 有15个数按从小到大的顺序存放在一个数组中。(折半查找)
  13. uCLinux简介--
  14. php的原子操作,原子操作 · 国外PHP框架Nette官网教程 · 看云
  15. norflash芯片分区
  16. java计算机毕业设计东理咨询交流论坛源码+数据库+系统+lw文档+部署
  17. Git(用在IDEA中)
  18. iOS获取文件夹下所有的文件
  19. 安卓镜像刻录软件_Android烧录工具-安卓烧录工具下载v6.0.43 官方最新版-西西软件下载...
  20. JSR 303 以及 拦截器

热门文章

  1. rutime 理解
  2. 在Emacs下用C/C++编程(转载)
  3. LA 6047Perfect Matching(回文串哈希)
  4. android学习之ListView如何使用
  5. PB 程序发布相关
  6. Ubuntu18.04安装
  7. jQuery-4.动画篇---动画基础隐藏和显示
  8. 什么是正则表达式模式修正符?
  9. PDF解决方案(1)--文件上传
  10. ubuntu 16.04: 添加字体