题目描述

作为一名新世纪共产主义的接班人,你认识到了资本主义的软弱性与妥协性,决定全面根除资本主义,跑步迈入共产主义。但是当你即将跨入共产主义大门的时候,遇到了万恶的资本家留下的与非电路封印,经过千辛万苦的研究,你终于把复杂的破解转变成了以下问题:

初始时你有一个空序列,之后有N个操作。

操作分为一下两种:

1 x:在序列末尾插入一个元素x(x=0或1)。

2 L R:定义nand[L,R]为序列第L个元素到第R个元素的与非和,询问nand[L,L]^nand[L,L+1]^nand[L,L+2]^......^nand[L,R]。

Nand就是先与,再取反

输入

从文件nand.in中读入数据。

输入第一行一个正整数N,表示操作个数。

接下来N行表示N个操作。

为了体现程序的在线性,记lastans为上一次操作二的回答,初始lastans=0,。对于操作1,你需要对x异或lastans。对于操作二,设现在序列中的元素个数为M,如果lastans=1,那么你需要作如下操作:L=M-L+1,R=M-R+1,swap(L,R)

输出

输出到nand.out中。

输出有多行。为对于每一个操作二的回答。

样例输入

6
1 1
1 1
1 0
2 1 2
2 1 3
2 2 3

样例输出

1
0
0

提示

【数据规模和约定】

数据点 N的规模 操作一的个数M1 操作二的个数M2

1 N<=1000 M1<=500 M2<=500

2 N<=1000 M1<=500 M2<=500

3 N<=200000 M1<=100000 M2<=100000

4 N<=200000 M1<=100000 M2<=100000

5 N<=1000000 M1<=900000 M2<=100000

题解:

  据说正解是什么线段树(?)反正我跑得快233。

  其实不是很难,推一下式子就好了。

       Nand[ i ,j ]定义同题面。那么nand[i,j]=!(nand[ I , j-1 ]&a[ j ]) =。。。(!a[ I ]& a [ i+1])&…….

       F[ I ]表示nand[ 1,I ]。F[ j ]= ……!((!  F[i-1]&a [i ])&a[ i+1 ])……Sum[ i] =f[1]^…^f[I ]观察上下两式。F[j]与nand[ I ,J ]结果与!(a[ I ]& a [ i+1])和!((! F[i-1]&a [i ])&a[ i+1 ]))有关。分类讨论一下,当A[I+1 ]==0时,两式结果相等,当A[I+1 ]==1时,那么仅在(A[ I ]==1&&F[I-1]==1)||(A[I]==0)时对答案可能产生影响。前者使这一层变成0与1,后者使这一层变成1与0 。

(具体不太好写,我在下面写一下式子)

当A[ I ]==1&&F[I-1]==1/(A[I]==0时可以自己画一下)

假设到A[I+X]之前A[I+?]都是1

&A[I+1]

然后!

&A[I+2]

&A[I+3]

&A[I+4]

&A[I+5]

&A[I+X]

a[ I ]

0

1

0

1

0

1

! F[i-1]&a [i ]

1

0

1

0

1

1

这也就意味着在F[I+X]之前F[I+y]与nand[I,I+Y]一直是相反的,所以他们的区间异或和仅与X的奇偶性有关(大家可以自己推一下)。从I+X到R,F数组的结果一直与nand[I,I+X+…]相等,这也就意味着这之后的F异或和与nand相等,所以这部分我们可以用F数组的答案来代替nand。再考虑前面F与nand不相等的部分。已经说过这部分异或和仅与X的奇偶性有关。

       最终答案就是sum[R]^sum[L-1]^1(x为奇数)sum[R]^sum[L-1](x为偶数)。对于查单点要特判233。

代码:

#include<cstdio>
#include<iostream>
using namespace std;
const int N=;
inline int read(){
int s=,k=;char ch=getchar();
while(ch<''||ch>'') k=ch=='-'?-:k,ch=getchar();
while(ch>=''&&ch<='') s=s*+(ch^),ch=getchar();
return s*k;
}
int n,m;
bool ans;
bool f[N],a[N];
bool sum[N];
int main(){
n=read();
for(int i=,op,x,l,r;i<=n;i++){
op=read();
if(op==){
x=read()^ans;
m++;
a[m]=x;
if(m==) f[m]=x;
else f[m]=-(f[m-]&x);
sum[m]=sum[m-]^f[m];
}
else{
l=read(),r=read();
if(ans==){
l=m-l+,r=m-r+; swap(l,r);
}
ans=a[l];
int j=l;
bool s=-(a[l]&a[l+]);
while(s!=f[j+]&&j<r){
ans^=s;
j++;
s=-(s&a[j+]);
}
if(j<r){
ans^=sum[r]^sum[j];
}
printf("%d\n",ans);
}
}
}

【注】:其实在查询【L,R】第一个0出现位置应用二分查或者链表,但题目数据太水,就直接暴力咯。

链表版(不是自己打的,懒,而且实测居然比暴力慢233):

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int M=+;
int n,ans,cnt,p;
int pre[M],nxt[M],sum[M],f[M],val[M];
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>'') {if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='') {x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;
}
int main(){
n=read();
for(int i=;i<=n;i++){
int opt,l,r;
opt=read();
if(opt==){
//cout<<opt<<endl;
val[++cnt]=read();
val[cnt]^=ans;
if(!val[cnt]){
nxt[p]=cnt;
p=cnt;
}else pre[cnt]=p;
if(cnt==)
f[]=sum[]=val[cnt];
else{
f[cnt]=!(f[cnt-]&val[cnt]);
sum[cnt]=sum[cnt-]^f[cnt];
}
}else{
//cout<<opt<<endl;
l=read();r=read();
if(ans==){
l=cnt-l+;r=cnt-r+;
swap(l,r);
}
if(l==r) { printf("%d\n",ans=val[l]);continue;}
if(val[l]==f[l]) {printf("%d\n",ans=sum[r]^sum[l-]);continue;}
else{
int pos=nxt[pre[l]];
if(val[l]==) pos=nxt[l];
pos=min(pos,r+);
int pd=pos-l;
if(pd&) {printf("%d\n",ans=sum[r]^sum[l-]^);continue;}
else {printf("%d\n",ans=sum[r]^sum[l-]);continue;}
}
//printf("%d\n",sum[r]^sum[l-1]);continue;
}
}
// while(1);
return ;
}

【某集训题解】【DAY 2 T3】与非的更多相关文章

  1. 2021-06-27 & 2021-06-28 集训题解

    西克 题目传送门 Description Solution 跟 2021年省选A卷D2T1 一模一样,懒得讲了 不过这个题似乎有点卡空间,所以卡不过去 Code #include <bits/s ...

  2. 十二省联考题解 - JLOI2019 题解

    十二省联考题解 - JLOI2019 题解 两个T3的难度较大 平均代码量远大于去年省选 套路题考查居多 A 难度等级 1 $n^2$暴力可以拿到$60$分的优秀成绩 然后可以想到把区间异或转化为前缀 ...

  3. 牛客网NOIP赛前集训营-提高组(第一场)

    牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...

  4. 【题解】[Ghd]

    [题解]Ghd 一道概率非酋题? 题目很有意思,要我们选出大于\(\frac{n}{2}\)个数字使得他们的最大公约数最大. 那么我们若随便选择一个数字,他在答案的集合里的概率就大于\(0.5\)了. ...

  5. BZOJ2453: 维护队列

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 183  Solved: 89[Submit][Status] Descripti ...

  6. Redis持久存储-AOF&RDB

    Redis中数据存储模式有2种:cache-only,persistence;cache-only即只做为"缓存"服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在&qu ...

  7. [NOI赛前训练]——专项测试3·数学

    由于并不想写T1和T2的题解……所有只有T3的题解了. T3 由于内部题就只写题解了. 好吧,我是一点都不想写…… 说一下这zz题解哪里写错了吧…… ……不想写…… 就说一个吧…… $n-\frac{ ...

  8. NOI导刊 2018河南郑州游记

    前言 本蒟蒻来自浙江的弱市弱校,因为不想两年\(OI\)一场空,以及想出去玩,所以与同届大佬一起报了\(NOI\)导刊,希望能留下点不错的记忆吧. \(Day\ 0\) \(10\)月\(1\)日 经 ...

  9. 我是怎么从安卓到php再成为前端开发工程师的

    记得我下定决心学Android(安卓)是17年的暑假,暑假前,学校组织了一次集训,美其名曰帮我们巩固知识,实际上就是学校和长沙的培训学校某牛达成了合作,教我们一些基础知识,然后集训完建议那些在学校没学 ...

随机推荐

  1. ZooKeeper源码分析-Jute-第二部分

    数据类型和流 本部分描述支持Hadoop的基础数据类型以及复合类型.我们的目的是支持一系列的类型,可以用于在不同的编程语言中简化和有效表达一定范围的记录类型. 基础类型 大部分情况下,Hadoop的大 ...

  2. Bash On Windows的学习

    Bash On Windows的学习 Bash On Windows的卸载 删除软件和设置:在 cmd 运行lxrun /uninstall 删除所有文件:在cmd中运行lxrun /uninstal ...

  3. SCI论文写作中的注意事项

    SCI论文一般都是英文的格式,其中有很多原则和细节需要我们注意,在我完成第一篇SCI论文的过程中,做些记录,同时和大家分享一下这些经验.同时也稍微改变一下园子里的人口比例,都是攻城狮,程序猿什么的也过 ...

  4. AospExtended K3 Note最新官方版 Android7.1.2 极速 省电 流畅 Galaxy XIAOMI Moto Lenovo Coolpad 均支持

    AospExtended 最新官方版 Android7.1.2 极速 省电 流畅 Galaxy  XIAOMI Moto  Lenovo  Coolpad  均支持 之前用过1629开发版等,体验了很 ...

  5. CentOS7.2上用KVM安装虚拟机window10踩过的坑

    最近两个星期一直在琢磨kvm安装window10操作系统,并且通过桥接模式与外界通信,经历了九九八十一难,终于搞定.下面就记录以下我们在探索的过程中踩过的坑. 安装KVM 1. 系统要求:需要一台可以 ...

  6. Failed to sync Gradle project 'XX'错误解决

    错误代码 Failed to sync Gradle project 'WeChat' Error:Failed to find target with hash string 'android-24 ...

  7. 抽象工厂模式(Java与Kotlin版)

    前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...

  8. vue2.0引入腾讯地图

    百度很多东西,然后我没找到腾讯地图在VUE2.0里面的引用.于是根据找的其他地图引用资料进行尝试.步骤如下. 首先在src里面建立了TMap.js的文件,内容如下: export function T ...

  9. Struts 框架 之 文件上传下载案例

    Struts 框架 文件上传 1. 先准备 Struts 环境 (我使用的是struts 2.3.4版本) 导jar包:

  10. 【亲测】自动构建多个指定的class并发执行:Jenkins+Maven+Testng框架

    要解决的问题:jenkins在自动构建maven项目时如何并发执行多个指定的class类 预置条件:testngXXX.xml文件已指定了多个class类 解决步骤:1.在maven项目中新建指定te ...