HIHO线段树(成段)
- #include <stdio.h>
- #define lson l,mid,id<<1
- #define rson mid+1,r,id<<1|1
- const int MM = ;
- int num[MM<<],lazy[MM<<];
- void push_down(int l,int r,int id)
- {
- int mid=(l+r)>>;
- num[id<<]=lazy[id]*(mid-l+);
- num[id<<|]=lazy[id]*(r-mid);
- lazy[id<<]=lazy[id<<|]=lazy[id];
- lazy[id]=;
- }
- void build_tree(int l,int r,int id)
- {
- lazy[id]=;
- if(l==r)
- {
- scanf("%d",&num[id]);
- return;
- }
- else
- {
- int mid=(l+r)>>;
- build_tree(lson);
- build_tree(rson);
- num[id]=num[id<<]+num[id<<|];
- }
- }
- void Update(int L,int R,int e,int l,int r,int id)
- {
- if(L<=l&&r<=R)
- {
- num[id]=(r-l+)*e;
- lazy[id]=e;
- return;
- }
- if(lazy[id])push_down(l,r,id);
- int mid=(l+r)>>;
- if(L<=mid)
- Update(L,R,e,lson);
- if(R>mid)
- Update(L,R,e,rson);
- num[id]=num[id<<]+num[id<<|];
- }
- int Query(int L,int R,int l,int r,int id)
- {
- if(L<=l&&r<=R)
- {
- return num[id];
- }
- if(lazy[id])push_down(l,r,id);
- int mid=(l+r)>>;
- int ret=;
- if(L<=mid)ret+=Query(L,R,lson);
- if(R>mid)ret+=Query(L,R,rson);
- num[id]=num[id<<]+num[id<<|];
- return ret;
- }
- int main()
- {
- int n,m,op,x,y,z;
- scanf("%d",&n);
- build_tree(,n,);
- scanf("%d",&m);
- while(m--)
- {
- scanf("%d",&op);
- if(op==)
- {
- scanf("%d %d %d",&x,&y,&z);
- Update(x,y,z,,n,);
- }
- else
- {
- scanf("%d %d",&x ,&y);
- int ans=Query(x,y,,n,);
- printf("%d\n",ans );
- }
- }
- }
HIHO线段树(成段)的更多相关文章
- POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)
A Simple Problem with Integers [题目链接]A Simple Problem with Integers [题目类型]线段树 成段增减+区间求和 &题解: 线段树 ...
- ACM: Copying Data 线段树-成段更新-解题报告
Copying Data Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description W ...
- Codeforces Round #149 (Div. 2) E. XOR on Segment (线段树成段更新+二进制)
题目链接:http://codeforces.com/problemset/problem/242/E 给你n个数,m个操作,操作1是查询l到r之间的和,操作2是将l到r之间的每个数xor与x. 这题 ...
- POJ 2777 Count Color (线段树成段更新+二进制思维)
题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的 ...
- hdu 4747【线段树-成段更新】.cpp
题意: 给出一个有n个数的数列,并定义mex(l, r)表示数列中第l个元素到第r个元素中第一个没有出现的最小非负整数. 求出这个数列中所有mex的值. 思路: 可以看出对于一个数列,mex(r, r ...
- HDU1698_Just a Hook(线段树/成段更新)
解题报告 题意: 原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和. 思路: 线段树成段更新,区间去和. #include <iostream> #include < ...
- HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )
线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...
- poj 3468 A Simple Problem with Integers 【线段树-成段更新】
题目:id=3468" target="_blank">poj 3468 A Simple Problem with Integers 题意:给出n个数.两种操作 ...
- POJ3468_A Simple Problem with Integers(线段树/成段更新)
解题报告 题意: 略 思路: 线段树成段更新,区间求和. #include <iostream> #include <cstring> #include <cstdio& ...
随机推荐
- CSS3 功能
1. CSS3在css2的基础上增加了很多功能,ie8以下的浏览器有可能不支持某些属性,增加了很多圆角.渐变.旋转.阴影等效果 2. 文本修饰 text-decoration 属性用来设置或删除文 ...
- RecycleView使用的那些坑
1.为条目设置margin值时,在6.0系统上会无效.此时在item的根外面套一层viewgroup解决. 2.当条目中有imageview时,必须给imageview设置 src或者backgrou ...
- Python 日期和时间
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...
- DevExpress.XtraGrid.Views.BandedGrid.BandedGridView
使用的是DevExpress.XtraGrid.Views.BandedGrid.BandedGridView 类 没有在工具箱里找到对应控件 ,绕了一下,先创建一个gridcontrol ,然后gr ...
- 【转】MYSQL入门学习之十三:自定义函数的基本操作
转载地址:http://www.2cto.com/database/201212/177382.html 一.自定义函数(UDF)的特性和功能 www.2cto.com 函数能分 ...
- UWP开发入门系列笔记之(一):UWP初览
标签: 随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说--于 ...
- windows上安装apache python mod_python
综述: windows上安装apache python mod_python的例子.教程甚至图解都不少:但作为新手还是会出错,而且一时无法快速排解. 在此笔者将根据自己的实践经验,给出几个需要注意 ...
- Y2K Accounting Bug 分类: POJ 2015-06-16 16:55 14人阅读 评论(0) 收藏
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11222 Accepted: 56 ...
- 测试Animation大型动画文件拆分播放的可行性
最近遇到一个问题,剧情动画文件大了复杂了之后,每次修改输出很麻烦,导出fbx就需要20分钟. 所以我想到了一个比较好的解决方法,在unity这边解决.把动画文件拆分成若干份,然后赋予不同的层并行播放 ...
- ubuntu下环境变量
01:/etc/environment:是设置整个系统的环境: 02:/etc/profile:是设置所有用户的环境: 03:.bashrc :本地用户: