NOIP2023模拟16联测37 D. 小猫吃火龙果

news/2024/11/7 22:33:14/

NOIP2023模拟16联测37 D. 小猫吃火龙果

文章目录

  • NOIP2023模拟16联测37 D. 小猫吃火龙果
    • 题目大意
    • 思路
    • code

题目大意

n n n 个物品 A A A , B B B , C C C A A A B B B B B B C C C C C C A A A,有两种操作,给 [ l , r ] [ l , r ] [l,r] x , y x , y x,y 互换,求出经过操作后得出什么。

n , m ≤ 2 × 1 0 5 n , m \le 2\times10^5 n,m2×105

思路

分块

维护一个状态 c i c_i ci 表示这个块的 A , B , C A , B , C A,B,C 分别变成了什么。

再维护一个 t o i d , x , y to_{id , x , y} toid,x,y i d id id 块,状态为 x x x,把 y y y 带进去会带出来什么。

code

#include <bits/stdc++.h>
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
#define get_next(now , x) (now == (x + 1) % 3 ? x : now)
using namespace std;
const int N = 2e5 + 5;
int n , m , a[N] , block , to[N][6][3] , t[N];
int c[6][3] = {{0 , 1 , 2} , {0 , 2 , 1} , {1 , 0 , 2} , {1 , 2 , 0} , {2 , 0 , 1} , {2 , 1 , 0}};
int b[6][3] = {{2 , 5 , 1} , {3 , 4 , 0} , {0 , 3 , 4} , {1 , 2 , 5} , {5 , 1 , 2} , {4 , 0 , 3}};
inline int read () {char ch = getchar ();while (ch != 'A' && ch != 'B' && ch != 'C') ch = getchar ();return ch - 'A';
}
// inline int get_next (int now , int x) {
//     if (now == (x + 1) % 3) return x;
//     else return now;
// }
inline void updata (int id) {int l = id * block + 1 , r = min ((id + 1) * block , n);fu (i , 0 , 5) {fu (j , 0 , 2) {to[id][i][j] = j;fu (k , l , r) to[id][i][j] = get_next (to[id][i][j] , c[i][a[k]]);}}
}
inline void renew (int id) {int l = id * block + 1 , r = min ((id + 1) * block , n);fu (i , l , r) a[i] = c[t[id]][a[i]];t[id] = 0;
}
inline int rd () {int val = 0;char ch = getchar ();while (ch < '0' || ch > '9') ch = getchar ();while (ch >= '0' && ch <= '9') {val = val * 10 + (ch - '0');ch = getchar ();}return val;
}
int main () {freopen ("training.in" , "r" , stdin);freopen ("training.out" , "w" , stdout);int x , y , l , r , op , minr , id , type;n = rd () , m = rd ();fu (i , 1 , n) a[i] = read ();if(n>100)block = sqrt (n / 12);else block=sqrt(n);fu (i , 0 , (n + block - 1) / block) updata (i);while (m --) {op = rd () , l = rd () , r = rd ();if (op) {x = read ();id = (l - 1) / block;minr = min ((l - 1) / block * block + block , r);while (l <= minr) {x = get_next (x , c[t[id]][a[l]]);l ++;}while (l <= r - block + 1) {id = (l - 1) / block;x = to[id][t[id]][x];l += block;}id = (l - 1) / block;while (l <= r) {x = get_next (x , c[t[id]][a[l]]);l ++;}printf ("%c\n" , x + 'A');}else {x = read () , y = read ();if (x == y) continue;if (x > y) swap (x , y);id = (l - 1) / block;minr = min ((l - 1) / block * block + block , r);type = (x == 0 ? y == 1 ? 0 : 1 : 2);renew (id);while (l <= minr) {if (a[l] == x) a[l] = y;else if (a[l] == y) a[l] = x;l ++;}updata (id);while (l <= r- block + 1) {id = (l - 1) / block;t[id] = b[t[id]][type];l += block;}renew (id = (l - 1) / block);while (l <= r) {if (a[l] == x) a[l] = y;else if (a[l] == y) a[l] = x;l ++;}updata (id);}}return 0;
}

http://www.ppmy.cn/news/1209218.html

相关文章

遍历List集合和Map进行修改和删除报java.util.ConcurrentModificationException错误详解

一、异常产生 当我们使用foreach迭代一个ArrayList或者HashMap时&#xff0c;如果尝试对集合做一些修改操作&#xff08;例如删除元素或新增&#xff09;&#xff0c;可能会抛出java.util.ConcurrentModificationException的异常。 javapublic static void main(String[] args)…

【异常----finally和自定义异常】

文章目录 finally练习问题 异常的处理流程【异常处理流程总结】自定义异常类 finally 有些特定的代码&#xff0c;不论程序是否发生异常&#xff0c;都需要执行&#xff0c;比如程序中打开的资源&#xff1a;在程序正常或者异常退出时&#xff0c;必须要对资源进进行回收。另外…

Ubuntu 22.04 安装水星无线 USB 网卡

我的 USB 网卡是水星 Mercury 的&#xff0c; 在 Ubuntu 22.04 下面没有自动识别。 没有无线网卡的时候只能用有线接到路由器上&#xff0c;非常不方便。 寻思着把无线网卡驱动装好。折腾了几个小时装好了驱动。 1.检查网卡类型 & 安装驱动 使用 lsusb 看到的不一定是准确…

github遇到想要强制拉取远程仓库内容

进行项目的时候&#xff0c;遇到了我的远程仓库 Sync fork 更新以后&#xff0c;这时候我的本地就和远程不同步&#xff0c;如果使用 git pull 的时候&#xff0c;如果出现 conficts 过多的情况怎么办&#xff0c;如果我们想要直接把远程仓库拉下来应该怎么办&#xff1f; git…

宠物商城系统

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 宠物商城系统&#xff0c;支持登录、注册、浏览、搜索、详情页、加入购物车。比较简单

网工内推 | 运维工程师,软考认证优先,全额社保

01 北京中科网威信息技术有限公司 招聘岗位&#xff1a;运维工程师 职责描述&#xff1a; 1 熟悉网络安全标准&#xff0c;等级保护管理制度 2 负责等级保护管理制度的的企业管理要求编写&#xff1b; 3 熟系网络组网和相关安全产品&#xff1b; 4 负责用户需求挖掘、分析和…

各种业务场景调用API代理的API接口教程(附带电商平台api接口商品详情数据接入示例)

API代理的API接口在各种业务场景中具有广泛的应用&#xff0c;本文将介绍哪些业务场景可以使用API代理的API接口&#xff0c;并提供详细的调用教程和代码演示&#xff0c;同时&#xff0c;我们还将讨论在不同场景下使用API代理的API接口所带来的好处。 哪些业务场景可以使用API…

如何在vue里使用echarts

目录 安装echarts 全局使用echarts 组件使用echarts 关于按需引入 关于echarts各项属性配置 安装echarts 通过npm install echarts --save安装echarts组件。 全局使用echarts 在src目录下创建components/echarts/index.js文件&#xff08;名字随便起&#xff09;&#…