Just a Hook HDU - 1698Just a Hook HDU - 1698 线段树区间替换
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e5+;
struct node{
int l,r;
int sum;
int add;
}tr[N*];
void pushdown(int root)
{
if (tr[root].add)
{
tr[root<<].add=tr[root].add;
tr[root<<|].add=tr[root].add;
int mid=(tr[root].l+tr[root].r)/;
tr[root<<].sum=tr[root].add*(mid-tr[root].l+);
tr[root<<|].sum=tr[root].add*(tr[root].r-mid);
tr[root].add=;
}
}
void pushup(int u)
{
tr[u].sum=tr[u<<].sum+tr[u<<|].sum;
}
void build(int root, int l, int r)
{
tr[root].l=l;
tr[root].r=r;
tr[root].add=;
tr[root].sum=;
if(l==r)
{
tr[root].sum = ;
return ;
}
int mid=l+r>>;
build(root<<,l,mid);
build(root<<|,mid+,r);
pushup(root);
}
void update(int root,int ql,int qr,int c)
{
if (ql>tr[root].r||qr<tr[root].l)
return;
if (ql<=tr[root].l&&tr[root].r<= qr)
{
tr[root].sum=(tr[root].r-tr[root].l+)*c;
tr[root].add=c;
}
else
{
pushdown(root);
int mid=tr[root].l+tr[root].r>>;
update(root<<,ql,qr,c);
update(root<<|,ql,qr,c);
pushup(root);
}
}
int main()
{
int t,cnt=;
scanf("%d",&t);
while(t--)
{
int n,q;
scanf("%d%d",&n,&q);
build(,,n);
while(q--)
{
int l,r,op;
scanf("%d%d%d",&l,&r,&op);
update(,l,r,op);
}
printf("Case %d: The total value of the hook is %d.\n", ++cnt, tr[].sum);
}
}
Just a Hook HDU - 1698Just a Hook HDU - 1698 线段树区间替换的更多相关文章
- HDU.1689 Just a Hook (线段树 区间替换 区间总和)
HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ...
- HDU 1698 Just a Hook(线段树 区间替换)
Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...
- E - Just a Hook HDU - 1698 线段树区间修改区间和模版题
题意 给出一段初始化全为1的区间 后面可以一段一段更改成 1 或 2 或3 问最后整段区间的和是多少 思路:标准线段树区间和模版题 #include<cstdio> #include& ...
- HDU 1698 线段树 区间更新求和
一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...
- hdu 3911 Black And White (线段树 区间合并)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3911 题意: 给你一段01序列,有两个操作: 1.区间异或,2.询问区间最长的连续的1得长度 思路: ...
- hdu 1698 线段树 区间更新 区间求和
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 1698 Just a Hook(线段树区间替换)
题目地址:pid=1698">HDU 1698 区间替换裸题.相同利用lazy延迟标记数组,这里仅仅是当lazy下放的时候把以下的lazy也所有改成lazy就好了. 代码例如以下: # ...
- HDU 1698 Just a Hook(线段树区间替换)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- [HDU] 1698 Just a Hook [线段树区间替换]
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- Go语言项目中使用zap日志库(翻译)
本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 在Go语言项目中使用Uber-go的Zap L ...
- Cheat Sheet pyspark RDD(PySpark 速查表)
- 微信小程序如何添加新的icon图标
第一步 先去阿里云下载图标http://www.iconfont.cn/ 根据需要把图片的代码下载下来,下载完成之后是一个 压缩包,解压压缩包里面有一个css的文件复制到项目中,更改后缀为wxss 第 ...
- Go语言实现:【剑指offer】把二叉树打印成多行
该题目来源于牛客网<剑指offer>专题. 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 需要分层,二维数组. Go语言实现: /** * Definition for ...
- 罗德里格斯旋转公式(Rodrigues' rotation formula)推导
本文综合了几个相关的维基百科,加了点自己的理解,从比较基础的向量投影和叉积讲起,推导出罗德里格斯旋转公式.公式比较繁杂,如有错误,欢迎评论区指出. 对于向量的三维旋转问题,给定旋转轴和旋转角度,用罗德 ...
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之一(三十七)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- 最通俗易懂的 Java 10 新特性讲解
自从 Java 9 开始,Oracle 调整了 Java 版本的发布策略,不再是之前的 N 年一个大版本,取而代之的是 6 个月一个小版本,三年一个大版本,这样可以让 Java 的最新改变迅速上线,而 ...
- Spring有哪些配置方式
1.XML 配置文件. Bean 所需的依赖项和服务在 XML 格式的配置文件中指定.这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项.它们通常以 bean 标签开头.例如: < ...
- cesium结合geoserver利用WFS服务实现图层新增(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- redis 5.0.7 源码阅读——动态字符串sds
redis中动态字符串sds相关的文件为:sds.h与sds.c 一.数据结构 redis中定义了自己的数据类型"sds",用于描述 char*,与一些数据结构 typedef c ...