正题

题目链接: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(nlog⁡n)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【倍增】相关推荐

  1. 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 ...

  2. Educational Codeforces Round 107 (Rated for Div. 2)

    Educational Codeforces Round 107 (Rated for Div. 2) 题号 题目 知识点 A Review Site 签到 B GCD Length 思维+构造 C ...

  3. 代写python作业费用标准_代做159.272作业、代写Programming Paradigms作业、代做Python实验作业、代写Java/c++编程作业代写Database|代做R...

    代做159.272作业.代写Programming Paradigms作业.代做Python实验作业.代写Java/c++编程作业代写Database|代做RComputational Thinkin ...

  4. Linux TWI开发指南

    文章目录 Linux TWI开发指南 1 前言 1.1 文档简介 1.2 目标读者 1.3 适用范围 2 模块介绍 2.1 模块功能介绍 2.2 相关术语介绍 2.2.1 硬件术语 2.2.2 软件术 ...

  5. 全志 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 ...

  6. 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 ...

  7. hihoCoder #1384 : Genius ACM [枚举+倍增]

    描述 Advanced CPU Manufacturer (ACM) is one of the best CPU manufacturer in the world. Every day, they ...

  8. codeforce 333B chips

    Gerald plays the following game. He has a checkered field of size n × n cells, where m various cells ...

  9. HDU - 3078 Network 倍增LCA

    倍增lca,把路径上点全部拉出来拍个序输出第k大就过了. 不知道怎么过的,咱也不敢问. #include<stdio.h> #include<string.h> #includ ...

最新文章

  1. matlab批量储存变量_科协五分钟|用Matlab工具包处理音频信号
  2. dsst依赖opencv
  3. python绘制灰度图片直方图-python数字图像处理实现直方图与均衡化
  4. python图片横向合并_python实现图片横向和纵向拼接
  5. Python列出文件夹下某类文件名的方法
  6. 信息系统项目管理02——信息系统项目管理基础
  7. 设计模式(三)结构型模式
  8. 查询记录rs.previous()使用
  9. JavaScript离线帮助文档 网盘下载
  10. Unity基础——List的用法
  11. WEB版 音乐播放器
  12. 安卓 摇一摇 事件监听
  13. 证件照的尺寸,颜色,用途
  14. 【先锋】永洪科技何春涛:不忘初心,砥砺前行
  15. huskar与hsf
  16. Linux面试题--1
  17. [附源码]java毕业设计新能源汽车租赁管理系统
  18. python自动排版公众号_那些排版好看的公众号,都在偷偷使用这些神器
  19. [大学物理实验-5]波尔共振实验
  20. 优质的国外程序员网站

热门文章

  1. java输入数据插入if_java编程,从键盘录入10个整数数据,将每次录入的数据按从小到大的顺序插入到数组中。...
  2. oracle如何往dg加盘_oracle 在物理机上添加磁盘操作
  3. 计算机数控是什么专业,数控是什么专业
  4. 安装mysql二进制文件_MySQL二进制文件规范安装
  5. python 进程池_python进程池
  6. Jdbc连接mysql的五种连接方式
  7. 7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀
  8. C++ 学习之旅(8)——一文搞懂指针、引用、函数参数的传值调用、指针调用和引用调用
  9. [SpringBoot2]Thymeleaf
  10. C++实现顺序串(完整代码)