CF1511G-Chips on a Board【倍增】
正题
题目链接:https://www.luogu.com.cn/problem/CF1511G
题目大意
给出\(n*m\)的棋盘上每一行有一个棋子,双方轮流操作可以把一个棋子向左移动若干步(不能不动),无法操作者输。
\(q\)次询问只留下期盼的\(l\sim r\)列时的胜负情况。
解题思路
右边界就是一个上限很好搞,但是左边界很麻烦,因为相当于让这些数都减去一个值。
因为二进制位下的,所以考虑一下一个类似于\(ST\)表的做法。设\(f_{i,j}\)表示留下\([i,i+2^j-1]\)的棋盘时的异或和。
合并的时候只需要多考虑一下在\([i+2^{j-1},i+2^j-1]\)位置的棋子数是奇数还是偶数就好了,如果是奇数还要多异或一个\(2^{j-1}\)。
然后询问的合并同理。
时间复杂度\(O(n\log n)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+10;
int n,m,q,f[N][19],s[N];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
f[x-1][1]^=1;s[x]^=1;
}
for(int i=1;i<=m;i++)s[i]^=s[i-1];
for(int j=2;(1<<j)<=m;j++)
for(int i=1;i+(1<<j)-1<=m;i++){
f[i][j]=f[i][j-1]^f[i+(1<<j-1)][j-1];
if(s[i+(1<<j)-1]^s[i+(1<<j-1)-1])f[i][j]^=(1<<j-1);
}
scanf("%d",&q);
while(q--){
int l,r,ans=0;
scanf("%d%d",&l,&r);
for(int j=18;j>=0;j--)
if(l+(1<<j)-1<=r){
ans^=f[l][j];l+=(1<<j);
if(s[r]^s[l-1])ans^=(1<<j);
}
if(ans)putchar('A');
else putchar('B');
}
return 0;
}
CF1511G-Chips on a Board【倍增】的更多相关文章
- CF1511G Chips on a Board (倍增)
题面 原题题面 转化方便版题意: 有 n n n 堆石子,第 i i i 堆有 c i ∈ [ 1 , m ] c_i\in [1,m] ci∈[1,m] 个石子,有 q q q 次询问,每次询问给 ...
- Codeforces 1511G - Chips on a Board(01trie/倍增)
Codeforces 题面传送门 & 洛谷题面传送门 一道名副其实的 hot tea 首先显然可以发现这俩人在玩 Nim 游戏,因此对于一个 \(c_i\in[l,r]\) 其 SG 值就是 ...
- Architecture of Device I/O Drivers, Device Driver Design
http://www.kalinskyassociates.com/Wpaper4.html Architecture of Device I/O Drivers Many embedded syst ...
- ARM JTAG 信号 RTCK 应该如何处理?
用户在调试内嵌可综合内核的 CPU 如 ARM7TDMI-S 时,需要通过打开仿真器的自适应时钟功能. 此时,ARM仿真器根据 RTCK 时钟信号的频率,产生可用于 CPU 内核当前时钟主频的最快的 ...
- Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors
Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...
- Codeforces Round #194 (Div. 2) D. Chips
D. Chips time limit per test:1 second memory limit per test:256 megabytes input:standard input outpu ...
- ACM-ICPC Beijing 2016 Genius ACM(倍增+二分)
描述 给定一个整数 M,对于任意一个整数集合 S,定义“校验值”如下: 从集合 S 中取出 M 对数(即 2∗M 个数,不能重复使用集合中的数,如果 S 中的整 数不够 M 对,则取到不能取为止),使 ...
- CH0601 Genius ACM【倍增】【归并排序】
0601 Genius ACM 0x00「基本算法」例题 描述 给定一个整数 M,对于任意一个整数集合 S,定义“校验值”如下: 从集合 S 中取出 M 对数(即 2∗M 个数,不能重复使用集合中的数 ...
- Codeforces Round #194 (Div. 1) B. Chips 水题
B. Chips Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/333/problem/B D ...
随机推荐
- npm 基本命令的使用
1.npm -v 查看npm版本 2.使用npm命令安装模块 npm install Module Name 例如安装jquery模块 npm install jquery 3.卸载模块 npm un ...
- css内容渐入效果实现
.fade-in-section { opacity: 0; transform: translateY(20vh); visibility: hidden; transition: opacity ...
- wpf 获得exe的运行路径
System.Reflection.Assembly.GetEntryAssembly().Location
- 【版本管理工具】git的介绍及常用命令总结
1 git简介 1.1 git是什么? "Git 是一个分布式版本控制软件,与CVS.Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可 ...
- 【linux】tail 命令详解
转自:https://www.cnblogs.com/fps2tao/p/7698224.html Linux命令:显示文件结尾 Head/Tail head 与 tail 就像它的名字一样的浅显易懂 ...
- JDBC高级篇(MYSQL)—— JDBC中初涉数据库事务
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package d_transaction; import java.sql.Connection; import java.sql ...
- bt面板安装邮局系统
前些日子阿里云优惠就顺便买了个服务器,今天想在阿里云的服务器上试着安装一个邮件服务,突然发现之前安装的好好的邮件服务插件不能正常安装了,一直报错. 点击该链接享受本文章的纯净无广告版 查看了下出错的地 ...
- JobExecutionContext中的JobDataMapjob与Detail与Trigger中的JobDataMapjob
public static void main(String[] args) { //配置模式 build模式 //1.实例一个JOB JobDetail jobDetail = JobBuilder ...
- Mysql 日期格式化 复杂日期区间查询
前言 最近在做项目涉及到Mysql的复杂日期查询,日期查询其实在数据库中查询其实还是用的挺多的,比如查询开始日期到结束日期的区间信息,查询日期小于有效日期的信息,查询当天的日期,明天的日期,做比较等. ...
- Qt之文件操作
虽然文件操作是一项很常用的功能,但是总记不住,今天就干脆记了一下笔记,以后好查阅. 在Qt中,主要使用的是QFile类进行文件操作,因此要包括#include <QFile>头文件.下面就 ...