题目链接

维护区间和,两个操作:一个是将某个区间设置成一个值,一个是将某个区间增加一个固定值

/**************************************************************/

每走到一个区间就把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)的更多相关文章

  1. hiho1079 - 数据结构 线段树(入门题,离散化)

    题目链接 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学校举办社团文化节,各大社团都在宣传栏上贴起了海报,但是贴来贴去 ...

  2. hdu 1166敌兵布阵(线段树入门题)

    >>点击进入原题测试<< 思路:这两天在学线段树,这个题直接手敲一下线段树就行了,都没有用上懒人标记.入门题 cin,cout会超时,记得加std::ios::sync_wit ...

  3. 几道简单的线段树入门题 POJ3264&&POJ3468&&POJ2777

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 40687   Accepted: 19137 ...

  4. [poj2104]可持久化线段树入门题(主席树)

    解题关键:离线求区间第k小,主席树的经典裸题: 对主席树的理解:主席树维护的是一段序列中某个数字出现的次数,所以需要预先离散化,最好使用vector的erase和unique函数,很方便:如果求整段序 ...

  5. Mosaic HDU 4819 二维线段树入门题

    Mosaic Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total S ...

  6. A Simple Problem with Integers(线段树入门题)

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

  7. HDU1698(线段树入门题)

    Just a Hook Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  8. POJ3264(线段树入门题)

    Balanced LineupCrawling in process... Crawling failed Time Limit:5000MS     Memory Limit:65536KB     ...

  9. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

随机推荐

  1. Asp.net mvc中使用配置Unity

    第一步:添加unity.mvc 第二步:在添加之后会在app_start中生成UnityConfig.cs,UnityMvcActivator.cs 第三步:使用 第四步:效果展示

  2. PHP 导出excel 数据量大时

    public function ceshiexcel1(){ set_time_limit(0); $filename = '病毒日志'; header('Content-Type: applicat ...

  3. table标签 在谷歌和ie浏览器下不同的表现效果

    在项目中有了一个这样的需求: 我需要利用vue的模板语法v-for循环生成tr,这个tr是需要双重循环来确定其个数的, 我的实现: 我在tr外面包了一个template标签, 效果: 谷歌浏览器下实现 ...

  4. LeetCode Golang 6. Z 字形变换

    6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  5. css3之BFC、IFC、GFC和FFC

    CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC. What's FC?一定不是KFC,FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念.它 ...

  6. IOS - 退出程序

    - (void)exitApplication { OAAppDelegate *app = [UIApplication sharedApplication].delegate; UIWindow ...

  7. ansible 连通测试

    [root@ftp:/root] > ansible ansible01 -m ping ansible01 | UNREACHABLE! => { "changed" ...

  8. office2016 下载直通车

    下载地址 微软官方序列号(产品激活密钥):NKGG6-WBPCC-HXWMY-6DQGJ-CPQVG. 激活工具下载 分享源地址

  9. vue懒加载

    vue懒加载(白屏或者加载慢的解决方法) 懒加载:也叫延迟加载,即在需要的时候进行加载,随用随载. 为什么需要懒加载? 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异 ...

  10. jvm 垃圾回收概念和算法

    1.概念 GC 中的垃圾,特指存在于内存中.不会再被使用的对象.垃圾回收有很多种算法,如引用计数法.复制算法.分代.分区的思想. 2.算法 1.引用计数法:对象被其他所引用时计数器加 1,而当引用失效 ...