LA 4108 (线段树)
区间更新 + 统计更新长度
稍稍不注意就T了
- #include<bits/stdc++.h>
- #define lson l, m, rt<<1
- #define rson m+1, r, rt<<1|1
- using namespace std;
- const int maxn = 100000 + 131;
- int Ma[maxn<<2], Mi[maxn<<2], Lazy[maxn<<2];
- int Cnt;
- void PushUp(int rt)
- {
- Ma[rt] = max(Ma[rt<<1], Ma[rt<<1|1]);
- Mi[rt] = min(Mi[rt<<1], Mi[rt<<1|1]);
- }
- void PushDown(int rt)
- {
- if(Lazy[rt] != -1)
- {
- Lazy[rt<<1] = Lazy[rt<<1|1] = Lazy[rt];
- Ma[rt<<1] = Ma[rt<<1|1] = Lazy[rt];
- Mi[rt<<1] = Mi[rt<<1|1] = Lazy[rt];
- Lazy[rt] = -1;
- }
- }
- void Build(int l, int r, int rt)
- {
- Ma[rt] = Mi[rt] = 0;
- Lazy[rt] = -1;
- if(l == r) return ;
- int m = (l + r) >> 1;
- Build(lson), Build(rson);
- }
- void Query(int L, int R, int val, int l,int r,int rt)
- {
- ////////////////////////////////////
- if(L <= l && r <= R)
- {
- if(val < Mi[rt]) return ;
- if(val >= Ma[rt])
- {
- Ma[rt] = Mi[rt] = val;
- Lazy[rt] = val;
- Cnt += r - l + 1;
- return ;
- }
- if(l == r) return ;
- }
- ///////////////////////////////////////
- PushDown(rt);
- int m = (l + r) >> 1;
- if(L <= m) Query(L, R, val, lson);
- if(R > m) Query(L, R, val, rson);
- PushUp(rt);
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--)
- {
- int n;
- scanf("%d",&n);
- Cnt = 0;
- Build(1,100000,1);
- int l, r, val;
- for(int i = 0; i < n; ++ i)
- {
- scanf("%d%d%d",&l,&r,&val);
- r--;
- Query(l,r,val,1,100000,1);
- }
- printf("%d\n",Cnt);
- }
- return 0;
- }
LA 4108 (线段树)的更多相关文章
- 并查集 + 线段树 LA 4730 Kingdom
题目传送门 题意:训练指南P248 分析:第一个操作可以用并查集实现,保存某集合的最小高度和最大高度以及城市个数.运用线段树成端更新来统计一个区间高度的个数,此时高度需要离散化.这题两种数据结构一起使 ...
- 线段树(区间合并) LA 3989 "Ray, Pass me the dishes!"
题目传送门 题意:动态最大连续子序列和,静态的题目 分析:nlogn的归并思想.线段树维护结点的三个信息,最大前缀和,最大后缀和,该区间的最大和的两个端点,然后答案是三个的better.书上用pair ...
- LA 3938 动态最大连续和 线段树
题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...
- LA 3938 动态最大连续和(线段树)
https://vjudge.net/problem/UVALive-3938 题意:给出一个长度为n的整数序列D,你的任务是对m个询问作出回答.对于询问(a,b),需要找到两个下标x和y,使得a≤x ...
- UVALive - 4108 SKYLINE (吉司机线段树)
题目链接 题意:在一条直线上依次建造n座建筑物,每座建筑物建造完成后询问它在多长的部分是最高的. 比较好想的方法是用线段树分别维护每个区间的最小值mi和最大值mx,当建造一座高度为x的建筑物时,若mi ...
- 数据结构习题 线段树&树状数组
说明:这是去年写了一半的东西,一直存在草稿箱里,今天整理东西的时候才发现,还是把它发表出来吧.. 以下所有题目来自Lrj的<训练指南> LA 2191 单点修改,区间和 Fenwick直 ...
- 【BZOJ-2325】道馆之战 树链剖分 + 线段树
2325: [ZJOI2011]道馆之战 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1153 Solved: 421[Submit][Statu ...
- UVA 11992 Fast Matrix Operations (二维线段树)
解法:因为至多20行,所以至多建20棵线段树,每行建一个.具体实现如下,有些复杂,慢慢看吧. #include <iostream> #include <cstdio> #in ...
- Mango DS Training #48 ---线段树2 解题手记
Training address: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=38966#overview A.Count Color ...
- HDU-3872 Dragon Ball 线段树+DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3872 题意:有n个龙珠按顺序放在一列,每个龙珠有一个type和一个权值,要求你把这n个龙珠分成k个段, ...
随机推荐
- html 表格边线设置
<table rules="all" style="margin-left: auto; margin-right: auto; margin-top: 50px; ...
- 使用Nginx在windows和linux上搭建集群
Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 特点:反向代理 负载均衡 动静分离… 反向代理(Reverse Pro ...
- asp.net写入读取xml的方法
添加命名空间 using System.Xml; 我自己的代码(添加其中的节点) XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(Server.M ...
- Listener 快速开始
[SessionListener] @WebListenerpublic class SessionListener implements HttpSessionListener,HttpSessio ...
- MySQL Errno : 1062 错误修复
网站突然出现如下错误: MySQL Error : Duplicate entry '1' for key 'views' MySQL Errno : 1062 Message : Duplicate ...
- VUE项目安装
连接转载:https://www.cnblogs.com/Colwill-Blog/p/6682091.html 刚刚开始学习Vue.js.今天分享一下我的Vue项目安装过程. 我是windows系统 ...
- JDK1.8源码分析之Comparable && Comparator
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util. ...
- 6-11数据库mysql初始
1,什么是数据(DATA)? 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 2,什么是数据库? ...
- struts2简单入门-参数传递的三种方式
三种方式的简单说明 属性传递 把参数定义为属性提供get/set方法. 使用情况 参数少,不需要共享. 演示代码 public class LoginAction extends ActionSupp ...
- netty长链接保存方案
架构 client router server zk redis 对于router: 保存客户端和服务器对 redis clientid : serverip & port 对于server ...