http://poj.org/problem?id=3468

真心觉得这题坑死我了,一直错,怎么改也没戏,最后tjj把q[rt].lz改成了long long 就对了,真心坑啊。

线段树的区域更新。

线段树功能:update:成段增减 query:区间求和

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
#define N 100002
struct node
{
int l,r;
long long lz,w;
}q[*N];
void pushup(int rt)
{
q[rt].w=q[rt*].w+q[rt*+].w;
}
void pushdown(int rt,int m)
{
if(q[rt].lz)
{
q[rt*].lz+=q[rt].lz;
q[rt*+].lz+=q[rt].lz;
q[rt*].w+=(m-m/)*q[rt].lz;
q[rt*+].w+=(m/)*q[rt].lz;
q[rt].lz=;
}
}
void build(int l,int r,int rt)
{
q[rt].l=l;
q[rt].r=r;
q[rt].lz=;
q[rt].w=;
if(l==r)
{
scanf("%lld",&q[rt].w);
return ;
}
build(l,(r+l)/,rt*);
build((r+l)/+,r,rt*+);
pushup(rt);
}
void update(int key,int ll,int rr,int l,int r,int rt)
{
if(ll<=l&&rr>=r)
{
q[rt].w+=(long long)key*(r-l+);
q[rt].lz+=key;
return ;
}
pushdown(rt,r-l+);
int m=(r+l)/;
if(ll<=m)
update(key,ll,rr,l,m,rt*);
if(rr>m)
{
update(key,ll,rr,m+,r,rt*+);
}
pushup(rt);
}
long long query(int ll,int rr,int l,int r,int rt)
{
if(ll<=l&&rr>=r)
{
return q[rt].w;
}
pushdown(rt,r-l+);
int m=(r+l)/;
long long L=;
if(ll<=m) L+=query(ll,rr,l,m,rt*);
if(rr>m) L+=query(ll,rr,m+,r,rt*+);
return L;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
build(,n,);
while(m--)
{
char op[];
int a , b , c;
scanf("%s",op);
if (op[] == 'Q')
{
scanf("%d%d",&a,&b);
long long tt=query(a,b,,n,);
printf("%lld\n",tt);
}
else if(op[]=='C')
{
scanf("%d%d%d",&a,&b,&c);
update(c,a,b,,n,);
}
}
}
return ; }

感觉这个博客不错http://www.douban.com/note/273509745/

poj3468A Simple Problem with Integers(线段树的区域更新)的更多相关文章

  1. 【POJ】3468 A Simple Problem with Integers ——线段树 成段更新 懒惰标记

    A Simple Problem with Integers Time Limit:5000MS   Memory Limit:131072K Case Time Limit:2000MS Descr ...

  2. A Simple Problem with Integers(线段树,区间更新)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 83822   ...

  3. POJ3468_A Simple Problem with Integers(线段树/成段更新)

    解题报告 题意: 略 思路: 线段树成段更新,区间求和. #include <iostream> #include <cstring> #include <cstdio& ...

  4. poj3468A Simple Problem with Integers(线段树,在段更新时要注意)

    Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...

  5. POJ 3468 A Simple Problem with Integers (线段树成段更新)

    题目链接:http://poj.org/problem?id=3468 题意就是给你一组数据,成段累加,成段查询. 很久之前做的,复习了一下成段更新,就是在单点更新基础上多了一个懒惰标记变量.upda ...

  6. 2018 ACMICPC上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节)

    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节) 链接:https://ac.nowcoder.co ...

  7. POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)

    A Simple Problem with Integers [题目链接]A Simple Problem with Integers [题目类型]线段树 成段增减+区间求和 &题解: 线段树 ...

  8. poj3468 A Simple Problem with Integers (线段树区间最大值)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 92127   ...

  9. POJ3648 A Simple Problem with Integers(线段树之成段更新。入门题)

    A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 53169 Acc ...

  10. poj 3468 A Simple Problem with Integers 线段树第一次 + 讲解

    A Simple Problem with Integers Description You have N integers, A1, A2, ... , AN. You need to deal w ...

随机推荐

  1. JS函数匿名替换

    //匿名替换函数 function objFunc() { var obj = new Object(); obj.JsonData = [{ aa: "}], obj.FilterData ...

  2. linux中根目录下各个目录的作用

    /bin 二进制可执行命令.该目录下存放着普通用户的命令 /dev 系统的设备文件,即设备的驱动程序 /home 用户主目录的基点 /lost-found 这个目录平时是空的,当系统非正常关机而留下的 ...

  3. USACO The Clocks

    操作间没有次序关系,同一个操作最多重复3次... 可以直接暴力... The Clocks IOI'94 - Day 2 Consider nine clocks arranged in a 3x3 ...

  4. shell 脚本调试

    1.第一行加 -xv #!/bin/bash –xv 2. bash -x shellName 3.如果只想调试其中几行脚本的话可以用 set -x 和 set +x 把要调试的部分包含进来: 比如: ...

  5. 网狐荣耀平台找不到存储过程 'GSP_GS_LoadGameMatchItem'错误解决

    把RYGameMatchDB的存储过程复制到RYGameScoreDB即可,GSP_GS_InsertGameMatchItem和GSP_GS_DeleteGameMatchItem也一样 由于存储过 ...

  6. javah生成jni头文件时报错 Error: cannot access android.support...

    javah生成jni头文件时报错: Error: cannot access android.support.v7.app.AppCompatActivity class file for andro ...

  7. Ubuntu下Chrome运行Silverlight程序

    Ubuntu 14.04.1下运行Terminal,安装Pipelight输入以下命令: sudo add-apt-repository ppa:pipelight/stable sudo apt-g ...

  8. Xcode - xcode-select: error: tool 'xcodebuild' requires Xcode报错解决方案

    用mac 自带的终端执行的命令,安装安装Vapor和toolbox 安装指令: macdeMacBook-Pro:~ mac$ curl -sL check.vapor.sh| bash 结果报这个错 ...

  9. Spring Framework框架容器核心源码逐步剖析

    目录 构建Spring环境 Spring 版本 5.1.3.RELEASE 测试类 Spring 配置文件 测试方法Main 快速进入Debug查看IOC容器构建源码 Spring IOC源码步骤分析 ...

  10. HDU 5636 Shortest Path(Floyed,枚举)

    Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...