线段树的区间更新 hdu 1698
***第一次写的果断超时,所以百度了一下,知道我写的每一次都要递归最底层,这样会花费很多时间,第二次写得线段树的区间更新,因为一个条件写错了,真是让我坑到死,
这样区间相同的不必更新,省了很多时间。。。***
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue> using namespace std;
typedef long long LL;
#define oo 0x3f3f3f3f
#define N 200100 struct node
{
int l, r;
int s;
} tree[N*4]; void build(int l, int r, int rt)
{
tree[rt].l=l;
tree[rt].r=r;
tree[rt].s=1;
if(l==r)
{
return ;
}
int mid=(l+r)/2;
build(l, mid, rt*2);
build(mid+1, r, rt*2+1);
} void update(int l, int r, int v, int rt)
{
if(tree[rt].s==v)
return ;
if(tree[rt].l==l&&tree[rt].r==r)
{
tree[rt].s=v;
return ;
}
if(tree[rt].s!=-1)
{
tree[rt*2].s=tree[rt*2+1].s=tree[rt].s;
tree[rt].s=-1;
}
int mid=(tree[rt].l+tree[rt].r)/2;
if(r<=mid) update(l, r, v, rt*2);
else if(l>mid) update(l, r, v, rt*2+1);
else
{
update(l, mid, v, rt*2);
update(mid+1, r, v, rt*2+1);
}
} int query(int rt)
{
if(tree[rt].s!=-1)
return (tree[rt].r-tree[rt].l+1)*tree[rt].s;
else
return query(rt*2)+query(rt*2+1);
} int main()
{
int T, n, m, a, b, c, cas=1;
scanf("%d", &T); while(T--)
{
scanf("%d%d", &n, &m);
build(1, n, 1);
while(m--)
{
scanf("%d%d%d", &a, &b, &c);
update(a, b, c, 1);
}
printf("Case %d: The total value of the hook is %d.\n", cas++, query(1));
}
return 0;
}
/*
20
3
2
1 2 2
2 2 3
*/
线段树的区间更新 hdu 1698的更多相关文章
- 线段树 [成段更新] HDU 1698 Just a Hook
成段更新,需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候. 此处建议在纸上模拟一遍. Problem Descript ...
- hdu 1698:Just a Hook(线段树,区间更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 1556 Color the ball(线段树:区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...
- UVA 12436-Rip Van Winkle's Code(线段树的区间更新)
题意: long long data[250001]; void A( int st, int nd ) { for( int i = st; i \le nd; i++ ) data[i] = da ...
- hdu1698线段树的区间更新区间查询
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- zoj3686(线段树的区间更新)
对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a ...
- Color the ball (线段树的区间更新问题)
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...
- ZOJ 2301 Color the Ball 线段树(区间更新+离散化)
Color the Ball Time Limit: 2 Seconds Memory Limit: 65536 KB There are infinite balls in a line ...
- 线段树离散化+区间更新——cf1179C好题
绝对是很好的题 把问题转化成当第i个询问的答案是数值x时是否可行 要判断值x是否可行,只要再将问题转化成a数组里>=x的值数量是否严格大于b数组里的>=x的值 那么线段树叶子结点维护对于值 ...
随机推荐
- [CF568E] Longest Increasing Subsequence
题目描述 Note that the memory limit in this problem is less than usual. Let's consider an array consisti ...
- 如何对连续型数据进行离散化处理,并进行OneHot编码?
如何对连续型数据进行离散化处理,并进行OneHot编码,最终将OneHot编码作为特征因子输入模型? 什么是OneHot编码 One-Hot编码是分类变量作为二进制向量的表示.这首先要求将分类值映射到 ...
- 华企盾DSC苹果电脑-认证用户提示“不是认证成功的账户”
出现该问题说明客户端连不上服务器,一般来说是网络原因,可按照下面方法排查 1.先检查网络是否通能否正常上网或者换一个网络试试 2.查看服务器是否启动 3.客户测试连接是否成功端口是否填成了5580 ...
- Python subprocess 使用(二)
Python subprocess 使用(二) 本篇继续介绍subprocess的使用. 这里主要添加两个自己在工作过程中常用的两个小命令. 1: 获取顶层activity import subpro ...
- Fiddler使用 抓取手机数据包及中文乱码解决方案
https://blog.csdn.net/zyb2017/article/details/79260086
- LLaMA大型语言模型
LLaMA (Large Language Model Meta AI)是Meta公司发布的大型语言模型系列,近日LLaMA种子文件被合并到了GitHub 上,同时一些项目维护者给予了批准,目前该项目 ...
- Windows下使用图形化的Havoc C2
Windows下使用图形化的Havoc C2 前言 这几天用goland去连虚拟机去coding真的心累,想着搞个wsl算了虽然测试又变麻烦了(wsl2和VMware一起开有问题,可能保存不了快照), ...
- 神经网络优化篇:详解神经网络的权重初始化(Weight Initialization for Deep NetworksVanishing / Exploding gradients)
神经网络的权重初始化 这是一个神经单元初始化地例子,然后再演变到整个深度网络. 来看看只有一个神经元的情况,然后才是深度网络. 单个神经元可能有4个输入特征,从\(x_{1}\)到\(x_{4}\), ...
- 云MSP服务案例丨某知名制造集团的Oracle RAC部署实践
简介: 随着DT时代到来,移动互联网.物联网开始高速发展,更多的企业意识到了数据库架构选型对业务发展的重要性,如何管理和利用好数据已经变得越来越重要.Oracle作为世界上目前最流行的关系型数据库管理 ...
- Python借助企业微信群机器人发送消息、图片和文件
企业微信功能日益强大,腾讯官方也提供了丰富的API供开发者实现企业微信的很多自动化场景.比如,如何给某个企业微信群发送消息.图片或者文件,甚至@指定群用户?别急,看小爬君轻松教会大家. Step1:在 ...