题目链接

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

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

每走到一个区间就把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. P1634 禽兽的传染病

    题目背景 mxj的启发. 题目描述 禽兽患传染病了.一个禽兽会传染x个禽兽.试问n轮传染后有多少禽兽被传染? 输入输出格式 输入格式: 两个数x和n. 输出格式: 一个数:被传染的禽兽数. 输入输出样 ...

  2. 软件测试作业-selenium

    一.作业要求 1.安装SeleniumIDE插件. 2.学会使用SeleniumIDE录制脚本和导出脚本. 3.访问网址使用学号登录系统,进入系统后可以看到该同学的git地址. 4.编写Seleniu ...

  3. input上传文件检测文件大小

    前几天在做 input[type='file'] 上传图片时,需要检测上传文件的内存大小,写了一个小demo,在此做一总结: <!DOCTYPE html> <html lang=& ...

  4. javascript中全屏滑动效果实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. JS对以对象组成的数组去重

    这是从https://segmentfault.com/q/1010000006954351参考的,达到了我要去重的功能!!! var hash = {};//arr是要去重的对象数组 arr = a ...

  6. 树莓派搭建 Google TV

    出处:http://my.oschina.net/funnky/blog/142067 树莓派搭建 Google TV 目录:[ - ] Google TV是啥玩意 ? 搭建我们自己的Google T ...

  7. SA 学习笔记

    后缀数组是解决字符串问题的有力工具--罗穗骞 后缀数组是对字符串的后缀排序的一个工具, sa将排名为i的字符串的开头位置记录下来, rnk将开头位置为i的字符串的排名记录下来. https://www ...

  8. centos 登陆跳转指定目录

    vi /etc/bashrc cd /usr/local 重启 reboot

  9. centos7最小化安装图形界面

    1.安装X Window System命令 yum groupinstall "X Window System" 选择y直接安装就可以了 2.安装图形界面软件 GNOME yum ...

  10. C 语言中函数的跳转

    1.同一个函数内,可以使用goto语句: eg: void  text_1( void ) { char i=0; a : i++; printf ( " text_1 = %d \r\n& ...