洛谷T44252 线索_分治线段树_思维题
分治线段树,其实就是将标记永久化,到最后再统一下传所有标记。
至于先后顺序,可以给每个节点开一个时间戳。
一般地,分治线段树用于离线,只查询一次答案的题目。
本题中,标记要被下传 222 次。
Code:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 100000 + 10;
int n,m, tag[maxn << 2], lazy[maxn << 2], siz[maxn], root[maxn], p[maxn], tag_root[maxn], ans[maxn];
int find(int x){ return p[x] == x ? x : p[x] = find(p[x]); }
struct Segment_Tree
{
# define lson (o << 1)
# define rson (o << 1)|1
void update(int l, int r, int L, int R, int col, int times, int o)
{
if(l > r || r < L || l > R) return ;
if(l >= L && r <= R)
{
lazy[o] = col, tag[o] = times;
return;
}
int mid = (l + r) >> 1;
update(l, mid, L, R,col, times, lson);
update(mid + 1, r, L, R, col , times, rson);
}
inline void pushdown(int o)
{
if(tag[o] > tag[lson])
lazy[lson] = lazy[o], tag[lson] = tag[o];
if(tag[o] > tag[rson])
lazy[rson] = lazy[o], tag[rson] = tag[o];
}
void release(int o, int l, int r)
{
if(l > r) return ;
if(l == r)
{
int x = find(l);
if(tag_root[x] > tag[o])
ans[l] = root[x];
else
ans[l] = lazy[o], tag_root[x] = tag[o], root[x] = lazy[o];
return ;
}
int mid = (l + r) >> 1;
pushdown(o);
release(lson, l, mid);
release(rson, mid + 1, r);
}
}T;
int main()
{
scanf("%d%d",&n,&m);
for(int i = 1;i <= n; ++i)
{
int c; scanf("%d",&c);
p[i] = i, root[i] = c, siz[i] = 1, tag_root[i] = 1;
}
for(int i = 2;i <= m + 1; ++i)
{
int opt, l, r, x;
scanf("%d%d%d%d",&opt,&l,&r,&x);
switch(opt)
{
case 1:
T.update(1, n, l, r, x, i, 1);
break;
case 2:
int a = find(l), b = find(r);
root[b] = x, tag_root[b] = i;
if(a != b) { p[a] = b, siz[b] += siz[a]; }
break;
}
}
T.release(1, 1, n);
T.release(1, 1, n);
for(int i = 1;i <= n; ++i) printf("%d ",ans[i]);
printf("\n");
for(int i = 1;i <= n; ++i)
{
int x = find(i);
printf("%d ",siz[x] - 1);
}
return 0;
}
洛谷T44252 线索_分治线段树_思维题的更多相关文章
- 洛谷 P3373 【模板】线段树 2
洛谷 P3373 [模板]线段树 2 洛谷传送门 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一 ...
- 洛谷P4891 序列(势能线段树)
洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...
- 洛谷P3899 [湖南集训]谈笑风生(线段树合并)
题意 题目链接 Sol 线段树合并板子题,目前我看到两种写法,分别是这样的. 前一种每次需要新建一个节点,空间是\(O(4nlogn)\) 后者不需要新建,空间是\(O(nlogn)\)(面向数据算空 ...
- 洛谷 P2147 [SDOI2008]洞穴勘测 (线段树分治)
题目链接 题解 早就想写线段树分治的题了. 对于每条边,它存在于一段时间 我们按时间来搞 我们可把一条边看做一条线段 我们可以模拟线段树操作,不断分治下去 把覆盖\(l-r\)这段时间的线段筛选出来, ...
- 洛谷P3372 【模板】线段树 1
P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...
- bzoj3064/洛谷P4314 CPU监控【线段树】
好,长草博客被催更了[?] 我感觉这题完全可以当作线段树3 线段树2考加法和乘法标记的下放顺序,这道题更丧心病狂[?] 很多人可能跟我一样,刚看到这道题秒出思路:打一个当前最大值一个历史最大值不就完事 ...
- 洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)
To 洛谷.2574 XOR的艺术 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的 ...
- 洛谷P4344 脑洞治疗仪 [SHOI2015] 线段树+二分答案/分块
!!!一道巨恶心的数据结构题,做完当场爆炸:) 首先,如果你用位运算的时候不小心<<打成>>了,你就可以像我一样陷入疯狂的死循环改半个小时 然后,如果你改出来之后忘记把陷入死循 ...
- Bzoj5294/洛谷P4428 [Bjoi2018]二进制(线段树)
题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接 ...
随机推荐
- 仅前端cookie之记住密码
参考文章给忘了...,我就在他基础上修改了一些,但至于安全性,我没弄md5,所以安全系数应该为0 <!DOCTYPE html> <html lang="en"& ...
- WTM
WTM的由来 WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代 ...
- 菜鸟学习ios
object-c中@interface和@property声明变量的区别 Objective-C语言关键词,与@synthesize配对使用.xcode4.5以及以后的版本,@synthesize ...
- ConcurrentHashMap 并发HashMap原理分析
ConcurrentHashMap和Hashtable主要区别就是围绕着锁的粒度以及如何锁.如图 左边便是Hashtable的实现方式---锁整个hash表:而右边则是Concurrent ...
- Python中的全局变量与局部变量的区别
全局变量与局部变量两者的本质区别就是在于作用域 用通俗的话来理解的话, 全局变量是在整个py文件中声明,全局范围内都可以访问 局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地 ...
- 简洁又快速地处理集合——Java8 Stream(下)
上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...
- xml01 验证
xml 验证 拥有正确的格式的xml是"形势良好"的xml 通过DTD验证的xml是"合法的"xml
- BA--湿球温度和干球温度的区别
关于湿球温度和干球温度的区别: 干湿球温度表:用一对并列装置的.形状完全相同的温度表,一支测气温,称干球温度表,另一支包有保持浸透蒸馏水的脱脂纱布,称湿球温度表.当空气未饱和时,湿球因表面蒸发需要消耗 ...
- spring mvc流程理解
1.controller处理的终究就是一个结果,默认是modelandview对象,controller里自己随便调用service或者dao,终究都还是在controller里有返回值. 2. 在 ...
- 初学ToggleButton 点击button,更换button背景图片;再次点击,恢复之前背景图
上方的图标,R.drawable.register_checked 是选中图片 下方的图标, R.drawable.register_unchecked 是未选中图片 默认是上方的选中效果.点击 ...