hiho1080 - 数据结构 线段树(入门题,两个lazy tag)
维护区间和,两个操作:一个是将某个区间设置成一个值,一个是将某个区间增加一个固定值
/**************************************************************/
每走到一个区间就把lazy tag下放。下放的时候注意顺序!
#include <cstdio>
#include <cstring>
const int N = ;
struct NODE{
int l,r;
int sum;
int setTo,add;
NODE(){setTo=add=;}
int length(){return (r-l+);}
};
int data[N];
NODE segtree[N*]; void build(int id,int l,int r){
segtree[id].l = l;
segtree[id].r = r;
if(l==r){
segtree[id].sum = data[l];
return ;
}
int mid = (l+r)>>;
build(id*+,l,mid);
build(id*+,mid+,r);
segtree[id].sum = segtree[id*+].sum+segtree[id*+].sum;
} void modify(int id,int spos,int epos,int value,int type){
if(segtree[id].l==spos&&segtree[id].r==epos){
if(type){
segtree[id].setTo = value;
segtree[id].add = ;
segtree[id].sum = segtree[id].length()*value;
}
else{
segtree[id].add += value;
segtree[id].sum += segtree[id].length()*value;
}
return ;
} //push down
if(segtree[id].setTo){
segtree[id*+].setTo=segtree[id*+].setTo=segtree[id].setTo;
segtree[id*+].add=segtree[id*+].add=;
segtree[id*+].sum = segtree[id*+].length()*segtree[id*+].setTo;
segtree[id*+].sum = segtree[id*+].length()*segtree[id*+].setTo;
segtree[id].setTo = ;
}
if(segtree[id].add){
segtree[id*+].add += segtree[id].add;
segtree[id*+].add += segtree[id].add;
segtree[id*+].sum += segtree[id*+].length()*segtree[id].add;
segtree[id*+].sum += segtree[id*+].length()*segtree[id].add;
segtree[id].add = ;
} int mid = (segtree[id].l+segtree[id].r)>>;
if(epos<=mid) modify(id*,spos,epos,value,type);
else if(spos>mid) modify(id*+,spos,epos,value,type);
else{
modify(id*+,spos,mid,value,type);
modify(id*+,mid+,epos,value,type);
} segtree[id].sum = segtree[id*+].sum+segtree[id*+].sum;
}
int main(){
int n,t;
scanf("%d%d",&n,&t); n++;
for(int i=;i<=n;i++) scanf("%d",data+i);
build(,,n);
while(t--){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
modify(,b+,c+,d,a);
printf("%d\n",segtree[].sum);
}
return ;
}
hiho1080 - 数据结构 线段树(入门题,两个lazy tag)的更多相关文章
- hiho1079 - 数据结构 线段树(入门题,离散化)
题目链接 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学校举办社团文化节,各大社团都在宣传栏上贴起了海报,但是贴来贴去 ...
- hdu 1166敌兵布阵(线段树入门题)
>>点击进入原题测试<< 思路:这两天在学线段树,这个题直接手敲一下线段树就行了,都没有用上懒人标记.入门题 cin,cout会超时,记得加std::ios::sync_wit ...
- 几道简单的线段树入门题 POJ3264&&POJ3468&&POJ2777
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 40687 Accepted: 19137 ...
- [poj2104]可持久化线段树入门题(主席树)
解题关键:离线求区间第k小,主席树的经典裸题: 对主席树的理解:主席树维护的是一段序列中某个数字出现的次数,所以需要预先离散化,最好使用vector的erase和unique函数,很方便:如果求整段序 ...
- Mosaic HDU 4819 二维线段树入门题
Mosaic Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total S ...
- A Simple Problem with Integers(线段树入门题)
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
- HDU1698(线段树入门题)
Just a Hook Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- POJ3264(线段树入门题)
Balanced LineupCrawling in process... Crawling failed Time Limit:5000MS Memory Limit:65536KB ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
随机推荐
- java同步锁的正确使用
同步锁分类 对象锁(this) 类锁(类的字节码文件对象即类名.class) 字符串锁(比较特别) 应用场景 在多线程下对共享资源的安全操作. 需求:启动5个线程对共享资源total进行安全操作. 同 ...
- 设置cookie,删除cookie,读取cookie
1.首先来说下cookie的作用 我们在浏览器中,经常涉及到数据的交换,比如你登录邮箱,登录一个页面.我们经常会在此时设置30天内记住我,或者自动登录选项.那么它们是怎么记录信息的呢,答案就是今天的主 ...
- Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)
PullToRefreshScrollView 自定义下拉刷新动画,只需改一处. 以下部分转载自http://blog.csdn.net/superjunjin/article/details/450 ...
- SwipeRefreshLayout的使用,下拉刷新
1. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android ...
- 别让好想法埋没:如何进行APP开发?
经常和许多创业者讨论,发现很多人想法都不错,但是都不知道该如何实现,今天就如何引导大家走出第一步写一篇文章,很多人通常误会一件事情,认为程序员开发可以一步步把自己的想法拼接出来,我有一个功能点,就让程 ...
- elasticsearch集群安全重启节点
es2.x 关闭集群的动态分片:(动态分片开启状态如果节点宕机了,会导致集群重新分配数据进行数据转移,会导致节点直接大量传输数据)curl -XPUT 'http://192.168.248.193: ...
- MyEclipse如何设置自动提示?
MyEclipse --> Preferences --> Java --> Editor --> Content Assist --> Enable auto acti ...
- Django-admin源码解析
启动 <1>启动django,运行manage.py文件,进行当前项目的环境配置 <2>按照INSTALLED_APPS中的顺序加载APP,首先加载admin 注册 <1 ...
- JS中通过LayUI的layer.prompt弹出文本输入层,多个按钮回调获取输入值
JS中通过LayUI弹出文本输入层,多个按钮回调: 如图所示,输入文本后点击通过/不通过按钮回调获取输入文本值的实现: 实现JS: layer.prompt({ formType: 2, // 弹出文 ...
- 记一次html页面传值给另一个html并解码
前言 由于最近写项目用到layui中的table.render,好像是直接由当前html直接与后台controller取数据,由一方(后台)遍历列表给html,而如果当前html需要传值给这个后台co ...