【LOJ6284】数列分块8
题目大意:维护一个序列,支持区间染色,查询区间中等于某个颜色的点的个数。
题解:考虑直接用线段树进行维护,维护区间相同颜色值和一个区间颜色是否相同的标记即可。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,m,a[maxn];
struct node{
#define ls(x) t[x].lc
#define rs(x) t[x].rc
int lc,rc,val,all;
}t[maxn<<1];
int tot,root;
inline void pushup(int o){
if(t[ls(o)].val==t[rs(o)].val&&t[ls(o)].all&&t[rs(o)].all)t[o].val=t[ls(o)].val,t[o].all=1;
else t[o].all=0;
}
inline void pushdown(int o){
if(t[o].all){
t[ls(o)].all=t[rs(o)].all=1;
t[ls(o)].val=t[rs(o)].val=t[o].val;
}
}
int build(int l,int r){
int o=++tot;
if(l==r){t[o].val=a[l],t[o].all=1;return o;}
int mid=l+r>>1;
ls(o)=build(l,mid),rs(o)=build(mid+1,r);
return pushup(o),o;
}
int query(int o,int l,int r,int x,int y,int c){
if(l==x&&r==y&&t[o].all){
if(t[o].val==c)return r-l+1;
else return t[o].val=c,0;
}
int mid=l+r>>1;
pushdown(o);
int ans=0;
if(y<=mid)ans=query(ls(o),l,mid,x,y,c);
else if(x>mid)ans=query(rs(o),mid+1,r,x,y,c);
else ans=query(ls(o),l,mid,x,mid,c)+query(rs(o),mid+1,r,mid+1,y,c);
return pushup(o),ans;
}
int main(){
scanf("%d",&n),m=n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
root=build(1,n);
while(m--){
int l,r,c;
scanf("%d%d%d",&l,&r,&c);
printf("%d\n",query(root,1,n,l,r,c));
}
return 0;
}
【LOJ6284】数列分块8的更多相关文章
- LOJ6284 数列分块入门8(分块)
两个锅 一个是sametag[i]==c 另一个是a[j]不要写成a[i] #include <cstdio> #include <cstring> #include < ...
- LOJ6277~6285 数列分块入门
Portals 分块需注意的问题 数组大小应为,因为最后一个块可能会超出的范围. 当操作的区间在一个块内时,要特判成暴力修改. 要清楚什么时候应该+tag[t] 数列分块入门 1 给出一个长为的数列, ...
- 数列分块总结——题目总版(hzwer分块九题及其他题目)(分块)
闲话 莫队算法似乎还是需要一点分块思想的......于是我就先来搞分块啦! 膜拜hzwer学长神犇%%%Orz 这九道题,每一道都堪称经典,强力打Call!点这里进入 算法简述 每一次考试被炸得体无完 ...
- #6278. 数列分块入门 2(询问区间内小于某个值 xx 的元素个数)
题目链接:https://loj.ac/problem/6278 题目大意:中文题目 具体思路:数列分块模板题,对于更新的时候,我们通过一个辅助数组来进行,对于原始的数组,我们只是用来加减,然后这个辅 ...
- LOJ 6277-6280 数列分块入门 1-4
数列分块是莫队分块的前置技能,练习一下 1.loj6277 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 直接分块+tag即可 #include <bits/stdc++.h ...
- 数列分块入门九题(三):LOJ6283~6285
Preface 最后一题我一直觉得用莫队是最好的. 数列分块入门 7--区间乘法,区间加法,单点询问 还是很简单的吧,比起数列分块入门 7就多了个区间乘. 类似于线段树,由于乘法的优先级高于加法,因此 ...
- 数列分块入门九题(二):LOJ6280~6282
Preface 个人感觉这中间的三题是最水的没有之一 数列分块入门 4--区间加法,区间求和 这个也是很多数据结构完爆的题目线段树入门题,但是练分块我们就要写吗 修改还是与之前类似,只不过我们要维护每 ...
- 数列分块入门九题(一):LOJ6277~6279
Preface 分块,一个神奇的暴力算法.可以把很多\(O(n^2)\)的数据结构题的暴力优化到常数极小的\(O(n\sqrt n)\).当一些毒瘤题无法用线段树,主席树,平衡树,树状数组...... ...
- LOJ6285 数列分块入门9(分块)
昨天对着代码看了一晚上 然后今天终于在loj上过了 数列分块入门9题撒花★,°:.☆( ̄▽ ̄)/$:.°★ . 然后相当玄学 块的大小调成\(\sqrt{n}\)会TLE,改成150就过了 啧 然后就 ...
- LOJ 6277:数列分块入门 1(分块入门)
#6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计讨论 3 测试数据 题目描述 给出一 ...
随机推荐
- Spring 基于XML配置
基于XML的配置 对于基于XML的配置,Spring 1.0的配置文件采用DTD格式,Spring2.0以后采用Schema格式,后者让不同类型的配罝拥有了自己的命名空间,使得配置文件更具扩展性.此外 ...
- SpringBoot 中 JPA 的使用
详细连接 简书https://www.jianshu.com/p/c14640b63653 新建项目,增加依赖 在 Intellij IDEA 里面新建一个空的 SpringBoot 项目.具体步骤参 ...
- MyBatis的demo
把以前写的关于mybatis的demo放在这边,以便查看. 目录结构: package com.test.mybatis.util; import java.io.IOException; impor ...
- 安装splash
参考: https://blog.csdn.net/qq_41020281/article/details/82599075
- python设计模式第七天【建造者模式】
1. 建造者模式UML图 2.应用场景 (1)专门创建具有符合属性的对象 3.代码实现 #!/usr/bin/env python #! _*_ coding: UTF-8 _*_ from abc ...
- JAVA不可变类(immutable)机制与String的不可变性--非常好.
JAVA不可变类(immutable)机制与String的不可变性 https://www.cnblogs.com/jaylon/p/5721571.html
- vscode運行vue和html
html 选中html文件,右键选择view in broswer.
- 二、启用Docker支持
一.使用
- 实体类注解错误:Could not determine type for: java.util.List
今天配置实体类注解时,出现以下错误: Caused by: org.hibernate.MappingException: Could not determine type for: java.uti ...
- 扫描某目录下的所有文件的MD5码并导出文件【可执行jar】
pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:// ...