当前位置: 首页 > news >正文

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

看没有题解,交一发。

题目传送门

思路

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

首先来看节点的编号,从上到下,从左到右依次给树上的节点进行编号,容易发现,设一个非叶子节点的编号为 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表示B
        return;
    }
    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);
    else
        modify(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.dtcms.com/a/17088.html

相关文章:

  • 【2025新】基于springboot的问卷调查小程序设计与实现
  • 物流数字化转型:报关单ocr api应用场景、报关单识别接口
  • 算法07-滑动窗⼝算法
  • GitHub推荐C++项目:基于muduo、protobuf、zookeeper实现RPC框架
  • HTML之JavaScript使用JSON
  • 尚硅谷爬虫note006
  • 什么是HTTP Error 429以及如何修复
  • Reinforcement Learning Heats Up 强化学习持续升温
  • PHP下载安装以及基本配置
  • java八股---java基础04(集合、异常、引用、线程)
  • DeepSeek本地化部署【window下安装】【linux下安装】
  • 如何使用DeepSeek学习新技能?
  • Redis 数据类型 List 列表
  • 消息队列之-RabbitMq 学习
  • 无人机遥感图像拼接及处理实践技术:生态环境监测、农业、林业等领域,结合图像拼接与处理技术,能够帮助我们更高效地进行地表空间要素的动态监测与分析
  • MySQL 篇 - Java 连接 MySQL 数据库并实现数据交互
  • 【观测先锋·制造业卓越可观测建设案例】 中顺洁柔—基于Bonree ONE实现AI大模型高级一体化可观测运维监控解决方案
  • QT设备树,具有设备树过滤功能
  • 什么是计算机中的 “终端”?
  • LeetCode《算法通关手册》 1.2 数组排序
  • 基于springboot+vue的考研学习分享平台设计与实现
  • 最新华为 HCIP-Datacom(H12-821)
  • Cisco Fabric Manager 5.0:统一数据的可见性和控制
  • 文心一言与gpt,核心原理对比
  • Python项目31:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)
  • 基于Odoo的数据中台建设:助力企业数据驱动决策
  • CentOS-Stream 9更换RT实时内核
  • 代码aaa
  • 【Unity】搭建泛型事件框架,可广泛应用于中小型的游戏项目!!!
  • STM32启动过程概述