[LCOI2018][WX] Tirpitz
\([LCOI2018][WX11.1]~Tirpitz\)
时限:1s 内存限制:131072KB
输入文件: T.in 输出文件: T.out
题目背景
王九日很颓废,这也就是他为什么这么弱的原因。
众所周知,提尔比茨(Tirpitz)又被称为“北方的孤独女王”。
然而这个东西和题目并没有什么关系
题目描述
\(Felling\)和邪恶的修道者\(Neyii\)对战。十分的激烈,地球人为了纪念这场伟大的战斗。于是将这一史诗级的故事,编写成了游戏,名字叫做《黑白块》
地球上的中二少年\(LZR\)十分沉浸于这段历史,不但以这段历史作为题目背景,出了一套题面十分毒瘤的题目,还去游玩了这款激烈的战斗游戏《黑白块》
然鹅他太手残了,玩《黑白块》的时候只能玩一列的情况(什么鬼)
然后为了简化问题,我们将这一列进行翻转,变为一行的情况。
然后我们分别以0代表白块,1代表黑块。
但是,这段黑白块是不断变化的,所以\(LZR\)想让你帮帮他,维护这一段黑白序列
需要你支持一下两种操作
1.将一个白块变成黑块
2.输出某个黑块左边的第一个白块
输入输出格式
输入格式
第一行有两个数,分别为\(N,M\) 表示这个黑白序列有个元素,共要进行\(M\)次操作
第二行有\(N\)个数字,为题目中描述的黑白序列
接下来有\(M\)行,每行有二个数字
若输入格式为
E X
则为将第\(X\)个块变成黑色,若已经是黑色。则忽略这条输入
若输出格式为
Z X
则请你输出第\(X\)个块最左面的白块,如果第\(X\)个块为白块,则输出\(X\)^\(K\)。若第\(X\)个数左边没有白块,则输出\(0\)。
\(K\)为上一次操作的\(X\),一开始\(K=0\),‘^’为异或。
输出格式
每行一个数字,为操作2中的白块位置。
样例输入输出
样例输出
4 4
0 0 0 0
E 1
Z 1
E 2
Z 4
样例输出
1
4
对于\(40\%\)的数据,\(N,M\le 10000\)
对于\(100\%\)的数据,\(N,M\le 3\cdot 10^6\)
首先\(O(N)\)预处理出每一个黑点\(X\)在最开始,左边的第一个白点的位置\(F(X)\)。
void Init(){
int Now = 0 ;
for(int i = 1; i <= N; i ++)
if(! Data[i]) Now = Data[i] ;
else F[i] = Now ;
}
然后,对于每一次修改,我们知道该点被修改了,但是它前面的那个点的属性并没有改变。所以我们直接将它赋值为前一个点的\(F\)就好了。然后对于每一次,询问,查询一个\(Find(X)\)就可以了。实际上是利用了一个类似于并查集的思想。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 500010
#define Inf 0x7fffffff
#define LL long long
using namespace std ;
int Read(){
int X = 0 ; char ch = getchar() ;
while(ch > '9' || ch < '0') ch = getchar() ;
while(ch >= '0' && ch <= '9')
X = (X << 1) + (X << 3) + (ch ^ 48), ch = getchar() ;
return X ;
}
int N, M, F[MAXN], Y ;
bool Data[MAXN] ;
int Find(int Now){
if(F[Now] == Now) return F[Now] ;
else return F[Now] = Find(F[Now]) ;
}
void Init(){
int Now = 0 ;
for(int i = 1; i <= N; i ++){
if(! Data[i]) Now = i ;
F[i] = Now ;
}
}
int main(){
N = Read(), M = Read() ;
for(int i = 1; i <= N; i ++)
Data[i] = Read() ;
Init() ;
for(int i = 1; i <= M; i ++){
char Opt = getchar() ;
if(Opt == 'E'){
int X = Read() ;
if(Data[X]) continue ;
Data[X] = 1 ;
F[X] = Find(X - 1) ;
} else{
int X = Read() ;
X = Find(X) ;
printf("%d\n", X ^ Y) ;
Y = X ^ Y ;
}
}
return 0 ;
}
[LCOI2018][WX] Tirpitz的更多相关文章
- wx.onMenuShareTimeline使用注意事项
我在开发测试过程中,发现使用wx.onMenuShareTimeline无效果,没有显示我定义的图片.title和链接,经过调试发现原因如下: 1.图片大小要大于300pix才能显示 2.这个方法必须 ...
- 微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
微信小程序上传图片的时候,如果是多图片上传,一般都是直接用一个循环进行wx.uploadFile 这个在电脑上面测试与苹果手机上面都不会有什么问题 但当用安卓测试的时候,你会发现小程序会提示一个the ...
- 微信 小程序 drawImage wx.canvasToTempFilePath wx.saveFile 获取设备宽高 尺寸问题
以下问题测试环境为微信开发者0.10.102800,手机端iphone6,如有不对敬谢指出. 根据我的测试,context.drawImage,在开发者工具中并不能画出来,只有预览到手机中显示. wx ...
- wx.ListCtrl简单使用例子
效果图: 示例代码: #! /usr/bin/env python #coding=utf-8 import wx import sys packages = [('jessica alba', 'p ...
- wx.html2.WebView在 target="_blank" or rel="external" 没有反映的解决方法
在wx.html2.EVT_WEBVIEW_LOADED中,用WebView.RunScript运行删除链接目标的脚本 javaScriptStr = '''function deleteBlank( ...
- referenceerror wx is not defined 微信JsSdk开发
如果你和我一样遇到了“referenceerror wx is not defined”错误,很有可能是jweixin-1.0.0.js与你其它某js冲突. 解决办法: <script type ...
- wxPython安装错误问题:No module named wx
今天心血来潮安装wxPython,本机win7,且已经安装Python,版本为2.7.3,然后IDE使用的PyCharm,然后wxPython下载的版本为:wxPython2.8-win32-unic ...
- 微信企业号 jsSDK wx.config报invalid signature错误,导致api接口无法使用
最近在做公司定制化的时候发现一个问题,使用微信的语音API的时候微信报错,错误信息为:the permission value is offline verifying 但是诡异的是:同样的代码在我们 ...
- PIL Image 转成 wx.Image、wx.Bitmap
import wx from PIL import Image def ConvertToWxImage(): pilImage = Image.open('1.png') image = wx.Em ...
随机推荐
- 简单测试Java线程安全中阻塞同步与非阻塞同步性能
摘抄自周志明老师的<深入理解Java虚拟机:JVM高级特性与最佳实践>13.2.2 线程安全的实现方法 1.名词解释 同步是指锁哥线程并发访问共享数据时,保证共享数据同一时刻只被一个线程访 ...
- swoole安装
转自:http://blog.csdn.net/u014207604/article/details/49926207 Windows 下安装 swoole 具体步骤: Swoole,原本不支持在Wi ...
- 基于easyUI实现权限管理系统(二)——菜单导航
此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 相关文件介绍 1. menu.jsp:菜单导航主界面 <!DOCTYPE html PUBLIC "-//W ...
- python2文件转换为exe可执行文件
windows下py文件的运行需要安装python,如果是exe文件就可以直接运行 1. 直接在命令行用pip安装 pyinstaller pip install pyinstaller 2 在命令行 ...
- MySql5.5以上版本设置主从结构的例子
为了实现读写分离,一般都需要先设置好mysql的主从结构,网上现有的mysql配置大都基于低版本,在5.5以上版本无法配置成功,所以参考了官方文档,写了这篇笔记. *主要参考Mysql 5.6的官方文 ...
- MySQL数据库(5)----删除或更新已有行
有时候,会需要删除某些行,或者修改其内容.这是候便需要用到DELETE语句和UPDATE语句. 1. DELETE 语句的基本格式如下所示: DELETE FROM tbl_name WHERE wh ...
- 微信小程序——组件(二)
在上篇文章组件(一)里已经讲解了如何创建一个项目,现在继续...讲解一个页面布局以及各个组件的使用.在学习过程中,发现小程序支持flex布局,这对于学习过react native的人来说太好了,布局方 ...
- 正则去除html标签属性保留指定标签
/// <summary> /// 去除标签里面的属性保留IMG标签属性 /// </summary> /// <param name="strText&quo ...
- 使用FMDB最新v2.3版本教程
使用FMDB教程 本教程针对于第一次接触开源库FMDB的同胞,从如何下载源码如何导入工程如何创建数据库如何写增删改查开始.使用的时最新版本的FMDB v2.3. 此教程开始日期为 2014.5.5 P ...
- 打通 Spark 系统运行内幕机制循环流程
本课主题 打通 Spark 系统运行内幕机制循环流程 引言 通过 DAGScheduelr 面向整个 Job,然后划分成不同的 Stage,Stage 是从后往前划分的,执行的时候是從前往后执行的,每 ...