CF1511G-Chips on a Board【倍增】
正题
题目链接:https://www.luogu.com.cn/problem/CF1511G
题目大意
给出n∗mn*mn∗m的棋盘上每一行有一个棋子,双方轮流操作可以把一个棋子向左移动若干步(不能不动),无法操作者输。
qqq次询问只留下期盼的l∼rl\sim rl∼r列时的胜负情况。
解题思路
右边界就是一个上限很好搞,但是左边界很麻烦,因为相当于让这些数都减去一个值。
因为二进制位下的,所以考虑一下一个类似于STSTST表的做法。设fi,jf_{i,j}fi,j表示留下[i,i+2j−1][i,i+2^j-1][i,i+2j−1]的棋盘时的异或和。
合并的时候只需要多考虑一下在[i+2j−1,i+2j−1][i+2^{j-1},i+2^j-1][i+2j−1,i+2j−1]位置的棋子数是奇数还是偶数就好了,如果是奇数还要多异或一个2j−12^{j-1}2j−1。
然后询问的合并同理。
时间复杂度O(nlogn)O(n\log n)O(nlogn)
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【倍增】相关推荐
- Educational Codeforces Round 107 (Rated for Div. 2) 题解
文章目录 A. Review Site B. GCD Length C. Yet Another Card Deck D. Min Cost String E. Colorings and Domin ...
- Educational Codeforces Round 107 (Rated for Div. 2)
Educational Codeforces Round 107 (Rated for Div. 2) 题号 题目 知识点 A Review Site 签到 B GCD Length 思维+构造 C ...
- 代写python作业费用标准_代做159.272作业、代写Programming Paradigms作业、代做Python实验作业、代写Java/c++编程作业代写Database|代做R...
代做159.272作业.代写Programming Paradigms作业.代做Python实验作业.代写Java/c++编程作业代写Database|代做RComputational Thinkin ...
- Linux TWI开发指南
文章目录 Linux TWI开发指南 1 前言 1.1 文档简介 1.2 目标读者 1.3 适用范围 2 模块介绍 2.1 模块功能介绍 2.2 相关术语介绍 2.2.1 硬件术语 2.2.2 软件术 ...
- 全志 Linux 系统启动优化 启动优化速度方式 优化启动流程 优化uboot 优化kernel等
文章目录 1 概述 2 启动速度优化简介 2.1 启动流程 2.2 测量方法 2.2.1 printk time 2.2.2 initcall_debug 2.2.3 bootgraph. 2.2.4 ...
- Debugging other STM32 chips with STLink on Nucleo-64 development board使用Nucleo板载STLink调试烧录外部STM32应用
This article tells how to program/debug a STM32 MCU in an external application board with ST-LINK/V2 ...
- hihoCoder #1384 : Genius ACM [枚举+倍增]
描述 Advanced CPU Manufacturer (ACM) is one of the best CPU manufacturer in the world. Every day, they ...
- codeforce 333B chips
Gerald plays the following game. He has a checkered field of size n × n cells, where m various cells ...
- HDU - 3078 Network 倍增LCA
倍增lca,把路径上点全部拉出来拍个序输出第k大就过了. 不知道怎么过的,咱也不敢问. #include<stdio.h> #include<string.h> #includ ...
最新文章
- matlab批量储存变量_科协五分钟|用Matlab工具包处理音频信号
- dsst依赖opencv
- python绘制灰度图片直方图-python数字图像处理实现直方图与均衡化
- python图片横向合并_python实现图片横向和纵向拼接
- Python列出文件夹下某类文件名的方法
- 信息系统项目管理02——信息系统项目管理基础
- 设计模式(三)结构型模式
- 查询记录rs.previous()使用
- JavaScript离线帮助文档 网盘下载
- Unity基础——List的用法
- WEB版 音乐播放器
- 安卓 摇一摇 事件监听
- 证件照的尺寸,颜色,用途
- 【先锋】永洪科技何春涛:不忘初心,砥砺前行
- huskar与hsf
- Linux面试题--1
- [附源码]java毕业设计新能源汽车租赁管理系统
- python自动排版公众号_那些排版好看的公众号,都在偷偷使用这些神器
- [大学物理实验-5]波尔共振实验
- 优质的国外程序员网站
热门文章
- java输入数据插入if_java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。...
- oracle如何往dg加盘_oracle 在物理机上添加磁盘操作
- 计算机数控是什么专业,数控是什么专业
- 安装mysql二进制文件_MySQL二进制文件规范安装
- python 进程池_python进程池
- Jdbc连接mysql的五种连接方式
- 7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀
- C++ 学习之旅(8)——一文搞懂指针、引用、函数参数的传值调用、指针调用和引用调用
- [SpringBoot2]Thymeleaf
- C++实现顺序串(完整代码)