区间更新 + 统计更新长度

稍稍不注意就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 (线段树)的更多相关文章

  1. 并查集 + 线段树 LA 4730 Kingdom

    题目传送门 题意:训练指南P248 分析:第一个操作可以用并查集实现,保存某集合的最小高度和最大高度以及城市个数.运用线段树成端更新来统计一个区间高度的个数,此时高度需要离散化.这题两种数据结构一起使 ...

  2. 线段树(区间合并) LA 3989 "Ray, Pass me the dishes!"

    题目传送门 题意:动态最大连续子序列和,静态的题目 分析:nlogn的归并思想.线段树维护结点的三个信息,最大前缀和,最大后缀和,该区间的最大和的两个端点,然后答案是三个的better.书上用pair ...

  3. LA 3938 动态最大连续和 线段树

    题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...

  4. LA 3938 动态最大连续和(线段树)

    https://vjudge.net/problem/UVALive-3938 题意:给出一个长度为n的整数序列D,你的任务是对m个询问作出回答.对于询问(a,b),需要找到两个下标x和y,使得a≤x ...

  5. UVALive - 4108 SKYLINE (吉司机线段树)

    题目链接 题意:在一条直线上依次建造n座建筑物,每座建筑物建造完成后询问它在多长的部分是最高的. 比较好想的方法是用线段树分别维护每个区间的最小值mi和最大值mx,当建造一座高度为x的建筑物时,若mi ...

  6. 数据结构习题 线段树&树状数组

    说明:这是去年写了一半的东西,一直存在草稿箱里,今天整理东西的时候才发现,还是把它发表出来吧.. 以下所有题目来自Lrj的<训练指南> LA 2191 单点修改,区间和  Fenwick直 ...

  7. 【BZOJ-2325】道馆之战 树链剖分 + 线段树

    2325: [ZJOI2011]道馆之战 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 1153  Solved: 421[Submit][Statu ...

  8. UVA 11992 Fast Matrix Operations (二维线段树)

    解法:因为至多20行,所以至多建20棵线段树,每行建一个.具体实现如下,有些复杂,慢慢看吧. #include <iostream> #include <cstdio> #in ...

  9. Mango DS Training #48 ---线段树2 解题手记

    Training address: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=38966#overview A.Count Color ...

  10. HDU-3872 Dragon Ball 线段树+DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3872 题意:有n个龙珠按顺序放在一列,每个龙珠有一个type和一个权值,要求你把这n个龙珠分成k个段, ...

随机推荐

  1. toString() 和 强制类型转换 (String)

    转自https://www.cnblogs.com/yuxiaoqi/p/3562161.html 简述 在Java中,往往需要把一个类型的变量转换成String 类型.作为菜鸟,有时候我会使用(St ...

  2. C# RichTextBox插入带颜色数据

    #region 日志记录.支持其他线程访问 public delegate void LogAppendDelegate(Color color, string text); public void ...

  3. eclipse竖向选择快捷键

    eclipse的编辑器自带竖向选择功能,在mac上的开启和关闭方法都是command+option+a,在windows下则为alt+shift+a

  4. 持续集成CI相关的几个概念

    持续集成 https://en.wikipedia.org/wiki/Continuous_integration 为什么要持续? 持续集成, 可以避免集成地狱(由于工作的源码 和 库中的源码的差异导 ...

  5. verilog仿真文件编写

    verilog仿真文件大概框架: ·timescale 1ns/1ps //但需要时间 module xxx_tb(); //仿真文件不需要输入和输出, intput clk; ] xx; //根据需 ...

  6. .net 使用oracle 的存储过程有返回值也有数据集(游标)

    public void GetData(string username, string userip, string userkey, string userareaid, string ypid, ...

  7. [C++]油田(Oil Deposits)-用DFS求连通块

    [本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...

  8. Linux下运行jmeter

    • 我们在做测试的时候,有时候要运行很久,公司用的测试服务器一般都是linux,就可以运行在linux下面,linux下面不能像windows一样有图形化界面,那怎么运行脚本呢,就先在windows上 ...

  9. 【blog】MarkDown语法解析为HTML工具

    txtmark <dependency> <groupId>es.nitaur.markdown</groupId> <artifactId>txtma ...

  10. 假设程序需要一个int类型的变量来保持你所有的音乐CD的数量

    假设程序需要一个int类型的变量来保持你所有的音乐CD的数量.初始值为0为该变量编写一条声明语句 int numCDs = 0;