poj 3468(线段树)
http://poj.org/problem?id=3468
题意:给n个数字,从A1 …………An m次命令,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(线段树)的更多相关文章
- hdu 1698+poj 3468 (线段树 区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1698 这个题意翻译起来有点猥琐啊,还是和谐一点吧 和涂颜色差不多,区间初始都为1,然后操作都是将x到y改为z,注 ...
- POJ 3468 线段树裸题
这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...
- poj 3468 线段树区间更新/查询
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
- POJ 3468 (线段树 区间增减) A Simple Problem with Integers
这题WA了好久,一直以为是lld和I64d的问题,后来发现是自己的pushdown函数写错了,说到底还是因为自己对线段树理解得不好. 因为是懒惰标记,所以只有在区间分开的时候才会将标记往下传递.更新和 ...
- C - A Simple Problem with Integers POJ - 3468 线段树模版(区间查询区间修改)
参考qsc大佬的视频 太强惹 先膜一下 视频在b站 直接搜线段树即可 #include<cstdio> using namespace std; ; int n,a[maxn]; stru ...
- 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 ...
- POJ 3468 线段树 成段更新 懒惰标记
A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072K Case Time Limit:2000MS Descr ...
- POJ 3468 线段树区间修改查询(Java,c++实现)
POJ 3468 (Java,c++实现) Java import java.io.*; import java.util.*; public class Main { static int n, m ...
- POJ 3468 线段树+状压
题意:给你n个数,有对区间的加减操作,问某个区间的和是多少. 思路:状压+线段树(要用lazy标记,否则会TLE) //By SiriusRen #include <cstdio> #in ...
随机推荐
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏
很多软件组件,大家都能想到了,大家也能做出来,但是成熟稳定.可靠.易用.功能全面,可信任,可相信,可开源就不是很容易,需要树立良好的口碑才可以. 1:往往会有黑客,进行撞库挖掘漏洞,很多系统的账户有可 ...
- ST教学分析:相同行为连续数
转载自:http://zhidao.baidu.com/link?url=cm8k1RuA3fZ8FQCHYXXiY7xseVs5IJo63A8oq3FZwhSgaGNe4c2U2ZDpBToGYn5 ...
- C# SaveFileDialog的用法(转载)
#region 保存对话框private void ShowSaveFileDialog(){//string localFilePath, fileNameExt, newFileName, Fil ...
- AutoHotKey实现将站点添加到IE的Intranet本地站点
最近在内部推行CRM系统,其中的CPQ组件要求必须将站点加入到"本地Intranet”才可以正常使用,但是由于使用用户比较多(超过几千人),并且每个用户的计算机水平都不一样,所以让用户手工去 ...
- Docker-compose
docker-compose:未找到命令 安装: 须切到root用户: curl -L https://github.com/docker/compose/releases/download/1.7. ...
- C 语言学习 第五次作业总结
第五次作业,主要学习和复习的是几种循环结构的使用. 在前一次的课堂上,同学们已经学习了分支语句的使用.分支语句和循环语句配合使用,就可以写出更多的,逻辑功能丰富的代码了. 逻辑功能的丰富,也意味着学习 ...
- Ubuntu使用MyEclipse闪退的解决办法
修改myeclipse.ini文件, -Xmx512m-XX:MaxPermSize=512m-XX:ReservedCodeCacheSize=256m-Dosgi.nls.warnings=ign ...
- 源码升级安装python
1.下载 python: https://www.python.org/downloads/release/python-2712/ 2.编译安装 sudo mkdir /usr/local/pyth ...
- 【转】HTML5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...
- linux下apache各种跳转(包括伪静态)的配置
1.404跳转: vi /etc/httpd/conf/httpd.conf 在虚拟主机配置里添加一行:ErrorDocument 404 /404.html 2.301跳转: 1)将不带www的 ...