题解:P11725 [JOIG 2025] 修学旅行 / School Trip

embedded/2025/2/15 11:18:36/

看没有题解,交一发。

题目传送门

思路

看到题面容易想到用线段树做,但是这道题要用一个形状为满三叉树的线段树,这样才方便统计答案。

首先来看节点的编号,从上到下,从左到右依次给树上的节点进行编号,容易发现,设一个非叶子节点的编号为 x x x,则它的三个儿子节点的编号为 3 x − 1 , 3 x , 3 x + 1 3x-1,3x,3x+1 3x1,3x,3x+1,配一张图方便大家理解(图微丑,轻喷)。

所以在建树和修改时,就可以直接算出子节点的编号。

剩下的就和线段树差不多了,直接上代码。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=2e6+6;//数组开大一点
int n,q;
bool t[N];
char s[N];
void build(int cur,int l,int r){//建树if(l==r){t[cur]=s[l]-'A';//0表示A,1表示Breturn;}int mid1=l+(r-l+1)/3-1,mid2=l+2*(r-l+1)/3-1;//将区间平均分成三部分build(cur*3-1,l,mid1);build(cur*3,mid1+1,mid2);build(cur*3+1,mid2+1,r);t[cur]=(t[cur*3-1]+t[cur*3]+t[cur*3+1]>1);//如果1的个数大于1,则B多,否则A多
}
void modify(int cur,int l,int r,int x){//单点修改if(l==r && l==x){t[cur]^=1;//修改return;}int mid1=l+(r-l+1)/3-1,mid2=l+2*(r-l+1)/3-1;if(x<=mid1)modify(cur*3-1,l,mid1,x);else if(x<=mid2)modify(cur*3,mid1+1,mid2,x);elsemodify(cur*3+1,mid2+1,r,x);t[cur]=(t[cur*3-1]+t[cur*3]+t[cur*3+1]>1);//重新统计答案
}
int main(){scanf("%d%d",&n,&q);scanf("%s",s+1);n=strlen(s+1);build(1,1,n);while(q--){int p;scanf("%d",&p);modify(1,1,n,p);printf("%c\n",t[1]+'A');//t[1]为最终的结果输出}return 0;
}

http://www.ppmy.cn/embedded/162391.html

相关文章

基于kafka、celery的日志收集报警项目

项目环境&#xff1a;centOS7.9 mariadb5.6 celery5.0 kafka3.6.1 项目时间&#xff1a;2025年1月 项目描述&#xff1a;这个项目搭建了一个基于 Nginx 和 Flask 的 Web 集群&#xff0c;使用 Filebeat 将 Nginx 的访问日志发送到 Kafka 集群。通过 Python 消费者程序解析日志…

python高级用法之pydantic

Pydantic 是一个基于 Python 类型提示的数据验证库。它利用 Python 的类型注解来定义数据模型&#xff0c;并自动进行类型检查、数据验证和错误处理。它被一些顶级的Python模块所采用&#xff0c;其中特别包括Hugging Face、FastAPI和Langchain。 优势&#xff1a; IDE 类型提…

uniapp商场之订单模块【订单列表】

文章目录 前言一、准备静态结构(分包)二、Tabs滑动切换1.Tabs文字渲染2.点文字高亮切换3.swiper滑动切换三、Tabs页面跳转高亮四、订单列表渲染1.封装列表组件2.订单状态父传子3.封装请求API4.准备请求参数5.初始化调用6.页面渲染五、订单支付1.页面条件渲染2.事件绑定前言 …

QEventLoop 的使用方法及特性详解

1. QEventLoop 的基本概念 QEventLoop 是 Qt 框架中用于管理事件循环的核心类。事件循环&#xff08;Event Loop&#xff09;是 GUI 应用程序的“心脏”&#xff0c;负责接收和分发事件&#xff08;如用户输入、定时器事件、网络事件等&#xff09;。每个 Qt 应用程序至少有一…

基于 MATLAB 的粒子滤波算法实现示例,用于处理手机传感器数据并估计电梯运行参数。

本研究提出一种基于智能手机传感器的电梯运行参数检测方法,通过调用手机内置加速度计等传感器获取电梯加速度、速度及运行距离等数据,并利用粒子滤波算法(PF)抑制传感器噪声。实验结果表明,经粒子滤波处理后,手机测量结果与专业检测设备数据对比误差显著降低,测量准确度…

3.3 学习UVM中的uvm_driver 类分为几步?

文章目录 前言1. 定义2. 核心功能3. 适用场景4. 使用方法5. 完整代码示例5.1 事务类定义5.2 Driver 类定义5.3 Sequencer 类定义5.4 测试平台 6. 代码说明7. 总结 前言 以下是关于 UVM 中 uvm_driver 的详细解释、核心功能、适用场景、使用方法以及一个完整的代码示例&#xff…

mysql的主从配置

#mysql数据库 #主从 MySQL数据库主从配置 1.MySQL主从介绍 MySQL 主从又叫做 Replication、AB 复制。简单讲就是 A 和 B 两台机器做主 从后&#xff0c;在 A 上写数据&#xff0c;另外一台 B 也会跟着写数据&#xff0c;两者数据实时同步的。 MySQL 主从是基于 binlog 的&…

【Elasticsearch】runtime_mappings搜索请求中定义运行时字段

在 Elasticsearch 中&#xff0c;在搜索请求中定义运行时字段&#xff08;Runtime Fields&#xff09;是一种强大的功能&#xff0c;允许用户在查询时动态添加和计算字段&#xff0c;而无需预先在索引映射中定义这些字段。这种方式提供了极大的灵活性&#xff0c;尤其是在处理动…