一开始这条链子全都是1

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
using namespace std;
///线段树 区间更新
#define MAX 100050
struct node
{
int left;
int right;
int mark;
int total;
};
node tree[MAX*4];
int build(int root,int left,int right)
{
tree[root].left=left;
tree[root].right=right;
tree[root].mark=1;
if(left==right)
{
return tree[root].total=0;
}
int mid=(left+right)>>1;
tree[root].total=(build(root<<1,left,mid)+build(root<<1|1,mid+1,right)); }
void update_mark(int root)
{
if(tree[root].mark!=0)
{
tree[root].total=(tree[root].right-tree[root].left+1)*tree[root].mark;
if(tree[root].left!=tree[root].right)
{
tree[root<<1].mark=tree[root<<1|1].mark=tree[root].mark;
}
tree[root].mark=0;
}
}
int update(int root,int l,int r,int va)
{
update_mark(root);
if(r<tree[root].left||l>tree[root].right)
return tree[root].total;
if(l<=tree[root].left&&r>=tree[root].right)
{
tree[root].mark=va;
return tree[root].total=(tree[root].right-tree[root].left+1)*va;
}
return tree[root].total=(update(root<<1,l,r,va)+update(root<<1|1,l,r,va));
}
int cal(int root,int l,int r)
{
update_mark(root);
if(r<tree[root].left||l>tree[root].right)
return 0;
if(l<=tree[root].left&&r>=tree[root].right)
{
return tree[root].total;
}
return (root<<1,l,r)+cal(root<<1|1,l,r);
}
int main(){
int t;
scanf("%d",&t);
int tt=0;
while(t--)
{
tt++;
int n;
scanf("%d",&n);
build(1,1,n);
int q;
scanf("%d",&q);
for(int i=0;i<q;i++)
{
int l,r;
int val;
scanf("%d%d%d",&l,&r,&val);
update(1,l,r,val);
}printf("Case %d: The total value of the hook is %d.\n",tt,cal(1,1,n ));
}
}

  

HDU 1698 线段树 区间更新求和的更多相关文章

  1. hdu 1698 线段树 区间更新 区间求和

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. HDU(1698),线段树区间更新

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 区间更新重点在于懒惰标记. 当你更新的区间就是整个区间的时候,直接sum[rt] = c*(r- ...

  3. HDU 1698 (线段树 区间更新) Just a Hook

    有m个操作,每个操作 X Y Z是将区间[X, Y]中的所有的数全部变为Z,最后询问整个区间所有数之和是多少. 区间更新有一个懒惰标记,set[o] = v,表示这个区间所有的数都是v,只有这个区间被 ...

  4. poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 75541   ...

  5. E - Just a Hook HDU - 1698 线段树区间修改区间和模版题

    题意  给出一段初始化全为1的区间  后面可以一段一段更改成 1 或 2 或3 问最后整段区间的和是多少 思路:标准线段树区间和模版题 #include<cstdio> #include& ...

  6. FZU 2171 线段树 区间更新求和

    很模板的题 在建树的时候输入 求和后更新 #include<stdio.h> #include<string.h> #include<algorithm> #inc ...

  7. [POJ] 3468 A Simple Problem with Integers [线段树区间更新求和]

    A Simple Problem with Integers   Description You have N integers, A1, A2, ... , AN. You need to deal ...

  8. HDU - 1698 线段树区间修改,区间查询

    这就是很简单的基本的线段树的基本操作,区间修改,区间查询,对区间内部信息打上laze标记,然后维护即可. 我自己做的时候太傻逼了...把区间修改写错了,对给定区间进行修改的时候,mid取的是节点的左右 ...

  9. Hdu 1698(线段树 区间修改 区间查询)

    In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...

随机推荐

  1. Catch That Cow(poj 3278)

    给定两个整数n和k 通过 n+1或n-1 或n*2 这3种操作,使得n==k 输出最少的操作次数 //广搜,a是队列,step记录步数,vis记录哪些数被搜到过 #include<cstdio& ...

  2. linux环境下配置虚拟主机域名

    linux环境下面配置虚拟主机域名 第一步:在root目录下面(即根目录)ls(查看文件)cd进入etc目录find hosts文件vi hosts 打开hosts文件并进行编辑在打开的文件最下面添加 ...

  3. Linux网络编程入门 (转载)

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

  4. p364习题1

  5. svn Error: post-commit hook failed (exit code 127) with output

    Command: Commit Modified: C:\Users\xsdff\Desktop\project\index.html Sending content: C:\Users\xsdff\ ...

  6. 注意padding-top 百分比定义基于父元素宽度的百分比上内边距!!是基于宽度

    定义和用法 padding-top 属性设置元素的上内边距(空间). 说明 该属性设置元素上内边距的宽度.行内非替换元素上设置的上内边距不会影响行高计算,因此,如果一个元素既有内边距又有背景,从视觉上 ...

  7. 企业级项目中最常用到的SQL

    用SQL语句添加删除修改字段 1.增加字段     alter table docdsp    add dspcode char(200) 例如: 表gwamis.d410Sctzmx添加字段f410 ...

  8. jQuery Mobile 基础(第三章)

    1.表单: 表单控件: 文本输入框 搜索输入框 单选按钮 复选框 选择菜单 滑动条 翻转拨动开关 fileld容器:如需让标签和表单元素看起来更适应宽屏,请用带有 data-role="fi ...

  9. Diskpart命令安装系统小结

    <diskpart命令安装系统小结> 今天给同学安装系统,win8改win7.同学是预装了win8的联想y480,分区表采用的是GPT格式,捣鼓了半天才知道.GPT格式是新式的分区格式,相 ...

  10. Win7-64bit系统下安装mysql的ODBC驱动

    安装过mysql数据库后,有些软件在调用mysql数据库时不会直接调用,需要安装mysql数据库的ODBC驱动,再来调用.这里就介绍下,如何在win7系统下安装mysql的ODBC驱动. Win7系统 ...