色板游戏 (珂朵莉树+优化)

news2024/11/27 0:29:19

色板游戏 - 洛谷

核心思路

用珂朵莉树处理区间赋值、计算颜色。

加一个记录答案,就可以过掉全部数据。

AC代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct ran{
    int l, r;
    mutable int v;
    bool operator <(const ran &x)const{//运算符重载,用于set的排序
        return l < x.l;//按区间的左端点从小到大来排
    }
};
#define It set<ran>::iterator
map<pair<int,pair<int,int>>,int> res;
set<ran>tr;//珂朵莉树的定义
It split(int pos){
    It it = tr.lower_bound({pos, -1, 0});//找到所需的pos的迭代器
    if(it != tr.end() && it->l == pos)return it;//看看这个迭代器的l是不是所需要的pos,是的话直接返回就行
    --it;//不是的话就说明肯定是在前一个里面
    int l = it->l;
    int r = it->r;
    ll v = it->v;
    tr.erase(it);//我们删掉这个区间
    tr.insert({l, pos - 1, v});//重新塞入两个区间[l, pos -1 ],[pos, r]
    return tr.insert({pos, r, v}).first;//返回以pos开头的区间的迭代器
}
bool pd[31];
void emerge(int l, int r, int v){
    It itr = split(r + 1);
    It itl = split(l);
  
    tr.erase(itl, itr);
    tr.insert(ran{l,r,v});
}
int t = 2;
int  ask(int l,int r){
	int ans = 0;
	It itr = split(r + 1);
    It itl = split(l);
	for(int i = 1;i <= t;i++){
		pd[i] = 0;
	}
	It it = itl;
    for(;it != itr;++it){
    	int col = it->v;
    //	cout<<col<<endl;
    	if(!pd[col]){
    		ans++;
    		pd[col] = 1;
		}
    }
    return ans;
}
int anss = 0;
int l,r;
int tot;
int main(){
	ios::sync_with_stdio(0);
	int L,O;
	cin>>L>>t>>O;
	tr.insert(ran{0,L+1,1});
	for(int i = 1;i <= O;i++){
		char op;
		cin>>op;
		if(op == 'C'){
			int l,r,v;
			cin>>l>>r>>v;
			if(r < l){
				swap(l,r);
			}
			++tot;
			emerge(l,r,v);
		}
		else{

			cin>>l>>r;
			if(r < l){
				swap(l,r);
			}
			if(res[{tot,{l,r}}]){
				cout<<res[{tot,{l,r}}]<<endl;
				continue;
			}
			int anser = ask(l,r);
			res[{tot,{l,r}}] = anser;
			cout<<anser<<endl;
		}
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CDP问卷填报流程-百胜企业管理咨询

填写CDP问卷需要以下几个步骤&#xff1a; 了解问卷内容&#xff1a;首先&#xff0c;仔细阅读问卷的说明和背景信息&#xff0c;了解问卷的目的和问题。这样可以更好地理解问题&#xff0c;并提供准确的答案。 分析问题&#xff1a;在填写问卷之前&#xff0c;花时间仔细阅读…

C语言 ——— 在杨氏矩阵中查找具体的某个数

目录 何为杨氏矩阵 题目要求 代码实现 何为杨氏矩阵 可以把杨氏矩阵理解为一个二维数组&#xff0c;这个二维数组中的每一行从左到右是递增的&#xff0c;每一列从上到下是递增的 题目要求 在杨氏矩阵中查找具体的某个数 要求&#xff1a;时间复杂度小于O(N) 代码实现…

机器学习--混淆矩阵(Confusion Matrix)

一、混淆矩阵 True Negative (TN)&#xff1a; 真负类&#xff0c;样本的真实类别是负类&#xff0c;并且模型将其识别为负类&#xff0c;cm[0][0]。False Positive (FP)&#xff1a; 假正类&#xff0c;样本的真实类别是负类&#xff0c;但是模型将其识别为正类&#xff0c;cm…

Mutual_Voting_for_Ranking_3D_Correspondences

因为目前主要在看表示学习&#xff0c;所以配准了解较少&#xff0c;这篇文章就主要记录了一下相关工作和作者提出的非dl的模型&#xff0c;实验部分很简略&#xff0c;大家可以做参考。 Abstract 在摘要部分&#xff0c;作者介绍了一种新颖的相互投票方法&#xff0c;用于对…

孙宇晨所到之处,投资人闻风丧胆?WBTC被坑惨了?MakerDAO带头抗议!BitGo退场!

为实现WBTC跨多个司法管辖区的托管业务和冷储存业务多元化&#xff0c;加密货币托管公司BitGo于8月10日宣布&#xff0c;将与BiT Global创建合资企业对Wrapped Bitcoin&#xff08;WBTC&#xff09;业务进行多司法管辖区托管&#xff0c;且BitGo将成为新合资企业的少数股东。此…

满天飞的浮毛怎么去掉?最最高效解决浮毛的办法宠物空气净化器

作为一名呼吸科医生&#xff0c;我们的工作有着明显的“淡旺季”之分。旺季&#xff1a;一是秋冬季节雾霾加剧&#xff0c;引发呼吸道不适&#xff1b;二是宠物换毛期&#xff0c;导致家庭环境中浮毛增多&#xff0c;进而引发呼吸道过敏、炎症等问题。秋冬的雾霾是自然界的不可…

java基础进阶——log日志、类加载器、XML、单元测试、注解、枚举类

前言 这篇内容主要掌握的就是logback使用、理解类加载器、XML文件的编写&#xff0c;XML文档约束schema&#xff0c;用Dom4j解析XML文档&#xff0c;Xpath检索XML文档&#xff0c;完整使用Junit单元测试框架常用部分&#xff0c;注解的定义和使用&#xff0c;枚举类的定义和开发…

IDEA:Dangling Javadoc comment

JetBrains对JavaDocs的描述&#xff1a; Javadoc comments are usually placed above classes, methods, or fields in your source code. A Javadoc provides a description of the code element located under it and contains block tags marked with with specific metada…

0x6 风险评估

风险评估介绍 一、风险评估解决的问题 二、什么是风险评估 三、风险评估的目的 加强信息安全保障&#xff1a;信息安全风险评估是信息安全体系建设和管理的关键环节。通过评估&#xff0c;能够发现系统的主要问题和矛盾&#xff0c;并找到解决关键问题的办法。 认清安全环境与…

Linux的常用操作-02

一&#xff1a;Linux的系统目录结构 /bin bin是ary的缩写&#xff0c;这个目录存放着最经常用的命令 /boot&#xff1a;这里存放的是启动Linux时使用的一些核心文件&#xff0c;包括一些连接文件以及镜像文件。 /dev&#xff1a;dev是Device(设备)的缩写,该目录下存放的是Lin…

尚硅谷MYSQL高级篇(一)

存储引擎 support是看是否支持这些存储引擎 default是默认的 transactions是看一下是否支持事务 xa是看是否支持分布式事务 savepoint 保存点是支持部分事务的回滚

2024 年最受欢迎的数据库

数据库是我们与技术交互的支柱&#xff0c;以下是 2024 年最受开发人员喜爱的十大数据库引擎列表。 数据库很像管道。用户就像房主一样&#xff0c;不一定知道数据库的结构&#xff0c;最多只能看到一些片段&#xff0c;但他们的大部分活动都依赖于底层框架。系统的存亡取决于数…

你不知道的EPLAN 小窍门

1 图形拉伸 下面有五条直线,如果想同时改变直线的倾斜角度,这时候我们可以用到拉伸命令。 编辑>图形>拉伸 然后全选5根线的顶端,就可以自由的拖动变形了。 图形中还有一些修剪,倒角,圆角等CAD中常用命令,大家可以自己尝试下。 2 显示标示性的编号 打开EPLAN设置,…

# 利刃出鞘_Tomcat 核心原理解析(六)

利刃出鞘_Tomcat 核心原理解析&#xff08;六&#xff09; 一、Tomcat专题 - 内容 1、Web 应用配置 2、Tomcat 管理配置 3、JVM 配置 4、Tomcat 集群 5、Tomcat 安全 6、Tomcat 性能调优 7、Tomcat 附加功能。 二、Tomcat专题 - Web应用配置介绍 1、Web.xml 配置文件…

人工智能在病理组学领域的最新进展|文献速递·24-08-09

小罗碎碎念 本期推文主题&#xff1a;人工智能在病理组学领域的最新进展 这一期推文和往期不太一样——往期几乎都是顶刊&#xff0c;而这一期选了一些分数不那么高的文章。这样做有两个原因&#xff1a; 验证一下在IF较低的期刊中能否找到灵感对比一下&#xff0c;期刊之间的…

子进程与父进程运行不同程序

往文件里面写内容&#xff0c;fork在open之前&#xff0c;会接着父进程写的内容写,继承父进程的状态信息&#xff0c;文件描述符一直往下 往文件里面写内容&#xff0c;fork在open之后&#xff0c;分别打开文件&#xff0c;后运行的会覆盖先运行的内容 让低8位有效 进程的终止…

LVS-NAT + LVS-DR

LVS 现在lvs已经是linux内核标准的一部分&#xff0c;使用lvs可以达到的技术目标是&#xff1a;通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群&#xff0c;他具有良好的可靠性&#xff0c;可延展性和可操作性&#xff0c;从而以低廉的成本实…

AQS的同步队列和条件队列原理

文章目录 二者区别实现原理同步队列原码-内部类Node源码-获取锁源码-释放锁条件队列原码-内部类Node源码-等待源码-唤醒Demo-比较典型的条件队列使用场景二者区别 首先,AQS中的 同步队列 和 条件队列 是两种不同队列: 目的不同:同步队列主要用于实现锁机制(也就是锁的获取…

4.3.2 C++ 平面拟合的实现

4.3.2 C 平面拟合的实现 参考教程&#xff1a; gaoxiang12/slam_in_autonomous_driving: 《自动驾驶中的SLAM技术》对应开源代码 (github.com) Eigen打印输出_打印eigen矩阵-CSDN博客 1. 编写 Plane fitting 1.1 创建文件夹 通过终端创建一个名为Plane_fitting的文件夹以保…

Cookie和Session的区别(详细讲解)

Session 和 Cookie 的区别 在网络通信过程中&#xff0c;使用的是HTTP协议&#xff0c;它是一种无状态协议&#xff0c;比如&#xff0c;在登录一个网站时&#xff0c;登录成功后&#xff0c;之后在访问这个网站的其他页面时&#xff0c;都需要重新登录&#xff0c;无法识别出…