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

题意:给n个数字,从A1 …………Am次命令,Q是查询,查询a到b的区间和,c是更新,从a到b每个值都增加x。
思路:这是一个很明显的线段树的题目,就是线段树的用区间更新就可以,我也是第一次用。。

 #include <stdio.h>
#include <string.h>
#define maxn 100050 long long arra[ maxn ]; struct note{ //要用long long 类型的,不然会爆数据的。 long long sum,c; }segtree[ maxn * ]; void build(int root , int instart , int iend) //插入操作。
{
segtree[ root ].c = ;
if(instart == iend)
segtree[ root ].sum = arra[ instart ];
else
{
int mid = (instart + iend)/;
build( root * , instart ,mid );
build( root * + , mid + , iend );
segtree[ root ].sum = segtree[ root * ].sum + segtree[ root * + ].sum;
}
} void pushdown(int root,int sta , int en ) //延迟标记。
{
if(segtree[ root ].c != )
{
segtree[ root * ].c += segtree[ root ].c;
segtree[ root * + ].c += segtree [ root ].c;
int mid = (sta + en) / ;
segtree[ root * ] .sum += segtree[ root ].c*( mid - sta + );
segtree[ root * + ].sum += segtree[ root ].c *( en - mid );
segtree[ root ].c = ;
}
} long long Find(int root , int ranges , int rangee , int goals ,int goale) //查找。查找时也需要对延迟标记进行更新。
{
if( goals > rangee || goale < ranges)
return ;
if( rangee <= goale && ranges >= goals)
return segtree[ root ].sum;
pushdown(root,ranges,rangee);
int mid = (rangee+ranges) / ;
return Find(root * , ranges , mid , goals ,goale)+ Find(root * + , mid + , rangee , goals , goale );
} void update(int root , int sta, int en,int x,int y,int val) //更新。
{
if( x > en || y < sta)
return ;
if( x <= sta && y >= en)
{
segtree[ root ].sum += val*( en - sta + ) ;
segtree[ root ].c += val ;
return ;
}
pushdown(root,sta,en);
int mid = ( sta + en ) / ;
update ( root * , sta , mid , x ,y ,val );
update ( root * + , mid + , en , x , y , val );
segtree [ root ].sum = segtree[ root * ].sum + segtree[ root * + ].sum;
} int main()
{
//freopen("in.txt","r",stdin);
int m,n,a,b,c;
char x;
scanf("%d%d",&m,&n);
for( int i = ; i <= m ; i++ )
scanf("%lld",&arra[i]);
build(,,m);
for( int i = ; i <= n ; i++ )
{
scanf("%s",&x);
if(x=='Q')
{
scanf("%d%d",&a,&b);
printf("%lld\n",Find(,,m,a,b));
}
else
{
scanf("%d%d%d",&a,&b,&c);
update(,,m,a,b,c);
}
}
return ;
}

poj 3468(线段树)的更多相关文章

  1. hdu 1698+poj 3468 (线段树 区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 这个题意翻译起来有点猥琐啊,还是和谐一点吧 和涂颜色差不多,区间初始都为1,然后操作都是将x到y改为z,注 ...

  2. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  3. poj 3468 线段树区间更新/查询

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

  4. POJ 3468 (线段树 区间增减) A Simple Problem with Integers

    这题WA了好久,一直以为是lld和I64d的问题,后来发现是自己的pushdown函数写错了,说到底还是因为自己对线段树理解得不好. 因为是懒惰标记,所以只有在区间分开的时候才会将标记往下传递.更新和 ...

  5. C - A Simple Problem with Integers POJ - 3468 线段树模版(区间查询区间修改)

    参考qsc大佬的视频 太强惹 先膜一下 视频在b站 直接搜线段树即可 #include<cstdio> using namespace std; ; int n,a[maxn]; stru ...

  6. poj 3468 线段树 成段增减 区间求和

    题意:Q是询问区间和,C是在区间内每个节点加上一个值 Sample Input 10 51 2 3 4 5 6 7 8 9 10Q 4 4Q 1 10Q 2 4C 3 6 3Q 2 4Sample O ...

  7. POJ 3468 线段树 成段更新 懒惰标记

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

  8. POJ 3468 线段树区间修改查询(Java,c++实现)

    POJ 3468 (Java,c++实现) Java import java.io.*; import java.util.*; public class Main { static int n, m ...

  9. POJ 3468 线段树+状压

    题意:给你n个数,有对区间的加减操作,问某个区间的和是多少. 思路:状压+线段树(要用lazy标记,否则会TLE) //By SiriusRen #include <cstdio> #in ...

随机推荐

  1. 快速掌握iOS API的一个小技巧

    快速掌握iOS API的一个小技巧 周银辉 iOS SDK和Developer Library中提供了各个类以及函数的帮助文档,这很棒,但要想了解整个库的大体结构(比如UIKit下有哪些类,他们的继承 ...

  2. LeetCode Intersection of Two Arrays

    原题链接在这里:https://leetcode.com/problems/intersection-of-two-arrays/ 题目: Given two arrays, write a func ...

  3. 可能是史上最强大的js图表库——ECharts带你入门

    PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...

  4. PhpStorm XDebug 远程调试

    现在我们自己公司的各种开发和测试服务器,都是使用阿里云的服务器.一些PHP的项目,无法在本地搭建完整的环境,在外网服务器上调试更方便定位问题.发现网上没有完整的关于如何配置PHPStorm和XDebu ...

  5. [Bundling and Minification ] 四、总结

    一.ASP.NET MVC 里面提供了一个默认的绑定集合BundleTable.Bundles 位于System.Web.Optimization下的静态类BundleTable中的一个静态变量.以下 ...

  6. android 自定义Style初探---ProgressBar

    系统自带的ProgressBar太丑了,所以我决定自定义一个Style. 原来的Style <?xml version="1.0" encoding="utf-8& ...

  7. 面向对象(Object-Oriented)

    面向对象 面向对象,即我们以对象为核心去实现我们的目的,对象顾名思义:万物皆对象,一个人,一条狗... 当我们通过对象处理一些事情时,会让我们的代码清晰明了,内部高聚合,对外低耦合,即封装的思想 相比 ...

  8. Unity 难点目录

    1.mesh的任意切割.(难点) 2.扇形区域识别玩家.(解决) 3.NGUI横滑同时竖滑,或滑动同时点击冲突处理.(解决)

  9. primefaces 查询 点击按钮 加载 动画 ajax loader

    只要在/WEB-INF/template.xhtml中body 里面加入: <ui:insert name="status"> <p:ajaxStatus sty ...

  10. ubuntu14.04 安装pip

    参考链接: 1.http://www.liquidweb.com/kb/how-to-install-pip-on-ubuntu-14-04-lts/ 2.http://idroot.net/tuto ...