链接:

https://www.luogu.org/problemnew/show/U47231

思路:

这道题其实就是一道双Lazy线段树裸题

因为我们知道,当k一定时,取反偶数次最后k位等于不取反

同理,当k一定时,翻转偶数次最后k位等于不取反

我们使用双Lazy分别存下这两个东西

同时一直对2取模

同时我们使用标记永久化

向下传参Lazy

单点查询到这个点时,判断是否需要取反即可

取反和翻转是位运算基本知识

大家可以看代码

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rij register int j
#define rii register int i
#define rs 65536
using namespace std;
struct tree{
int fz,qf,val;
}x[];
int n,k,q,t,bs[];
void ycl()
{
bs[]=;
for(rii=;i<=;i++)
{
bs[i]=bs[i-]*;
}
}
void cf(int val)
{
unsigned int kkk=val;
while(kkk!=)
{
cout<<kkk%<<" ";
kkk/=;
}
cout<<endl;
}
int qf(int val)
{
int bs=(<<k);
int ltt=val%bs;
val-=ltt;
ltt=-ltt;
ltt--;
unsigned kkk=ltt;
kkk%=bs;
return val+kkk;
}
int fz(int val)
{
int bis=(<<k);
int ltt=val%bis;
int v=;
val-=ltt;
for(rii=;i<=k;i++)
{
v+=(ltt%)*bs[k-i];
ltt/=;
}
return val+v;
}
void add(int wz,int nl,int nr,int val,int bh)
{
if(wz==nl&&wz==nr)
{
x[bh].val=val;
return;
}
int mid=(nl+nr)/;
if(wz<=mid)
{
add(wz,nl,mid,val,bh*);
}
else
{
add(wz,mid+,nr,val,bh*+);
}
}
void change1(int l,int r,int nl,int nr,int bh)
{
if(l<nl)
{
l=nl;
}
if(r>nr)
{
r=nr;
}
if(l==nl&&r==nr)
{
x[bh].qf++;
x[bh].qf%=;
return;
}
int mid=(nl+nr)/;
if(l<=mid)
{
change1(l,r,nl,mid,bh*);
}
if(r>mid)
{
change1(l,r,mid+,nr,bh*+);
}
}
void change2(int l,int r,int nl,int nr,int bh)
{
if(l<nl)
{
l=nl;
}
if(r>nr)
{
r=nr;
}
if(l==nl&&r==nr)
{
x[bh].fz++;
x[bh].fz%=;
return;
}
int mid=(nl+nr)/;
if(l<=mid)
{
change2(l,r,nl,mid,bh*);
}
if(r>mid)
{
change2(l,r,mid+,nr,bh*+);
}
}
int query(int wz,int nl,int nr,int bh,int lazy1,int lazy2)
{
lazy1%=;
lazy2%=;
if(wz==nl&&wz==nr)
{
lazy1+=x[bh].qf;
lazy2+=x[bh].fz;
int ltt=x[bh].val;
if(lazy1==)
{
ltt=qf(ltt);
}
if(lazy2==)
{
ltt=fz(ltt);
}
return ltt;
}
int mid=(nl+nr)/;
if(wz<=mid)
{
return query(wz,nl,mid,bh*,lazy1+x[bh].qf,lazy2+x[bh].fz);
}
else
{
return query(wz,mid+,nr,bh*+,lazy1+x[bh].qf,lazy2+x[bh].fz);
}
}
void pd(int wz,int l,int r)
{
if(l==r)
{
if(x[wz].fz!=)
{
x[wz].fz=;
x[wz].val=fz(x[wz].val);
}
if(x[wz].qf!=)
{
x[wz].qf=;
x[wz].val=qf(x[wz].val);
}
return;
}
if(x[wz].fz!=)
{
x[wz*].fz++;
x[wz*].fz%=;
x[wz*+].fz++;
x[wz*+].fz%=;
}
if(x[wz].qf!=)
{
x[wz*].qf++;
x[wz*].qf%=;
x[wz*+].qf++;
x[wz*+].qf%=;
}
x[wz].qf=;
x[wz].fz=;
int mid=(l+r)/;
pd(wz*,l,mid);
pd(wz*+,mid+,r);
}
int main()
{
// freopen("XiaoX10.in","r",stdin);
// freopen("XiaoX10.out","w",stdout);
ycl();
scanf("%d%d",&n,&t);
for(rii=;i<=n;i++)
{
int val;
scanf("%d",&val);
add(i,,rs,val,);
}
for(rii=;i<=t;i++)
{
if(i!=)
{
pd(,,rs);
}
scanf("%d%d",&q,&k);
int pid,l,r,wz;
for(rij=;j<=q;j++)
{
scanf("%d",&pid);
if(pid==)
{
scanf("%d%d",&l,&r);
change1(l,r,,rs,);
}
if(pid==)
{
scanf("%d%d",&l,&r);
change2(l,r,,rs,);
}
if(pid==)
{
scanf("%d",&wz);
int ltt=query(wz,,rs,,,);
printf("%d\n",ltt);
}
}
}
k=;
}

ztz11的noip模拟赛T1:愤怒的XiaoX的更多相关文章

  1. 20161007 NOIP 模拟赛 T1 解题报告

    排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...

  2. ztz11的noip模拟赛T3:评分系统

    代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  3. 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)

    打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...

  4. 【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)

    几个性质 我们通过推式子可以发现: \[B⇒AC⇒AAB⇒AAAC⇒C\] \[C⇒AB⇒AAC⇒AAAB⇒B\] 也就是说: 性质一: \(B,C\)可以相互转换. 则我们再次推式子可以发现: \[ ...

  5. 20161022 NOIP模拟赛 T1 解题报告

    旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...

  6. 20161023 NOIP 模拟赛 T1 解题报告

    Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...

  7. 20161004 NOIP 模拟赛 T1 解题报告

    第1题  小麦亩产一千八 [问题描述] “有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾……”,话说HYSBZ(Hengyang School for Boys & Zy) ...

  8. 神奇的NOIP模拟赛 T1 LGTB 玩扫雷

    LGTB 玩扫雷 在一个n m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示).LGTB 想在每个空地上写下它周围8 个方向相邻的格子中有几个雷.请帮助他输出写了之后的棋盘 ...

  9. ztz11的noip模拟赛T2:查房

    链接: https://www.luogu.org/problemnew/show/U46611 思路: 这道题告你n-1条边就是骗你的 部分分也是骗你的 这道题连对边5分钟的事 一个点对另一个点有影 ...

随机推荐

  1. vuex入门教程和思考 [转] 里面有几个实例

    Vuex基础概念 vuex中涉及的概念主要有下面几点,下面做个简单的介绍和理解. Vuex 官方文档:https://vuex.vuejs.org/zh-cn/ 官网有介绍,也有个demo shopp ...

  2. Linux Notes

    Do what we want based on what others already did with additional abstraction and organization to ser ...

  3. ASP.NET MVC学习笔记 第二天

    创建视图      返回给客户端的HTML代码最好通过视图指定.视图都在Views文件夹中定义.ViewsDemo控制器的视图需要一个ViewsDemo子目录,这是视图的约定.      可以把多个控 ...

  4. 微信小程序-04-详解介绍.json 配置文件

    致我自己:小程序开发不是简单一两天的事,一两天只能算是了解,有时候看多了会烦,感觉很熟悉了,其实只是对表面进行了解,对编程却知之甚少,小程序开发不是简单的改模板,一两天很多部分改模板可能都做不到,坚持 ...

  5. python 网络 socket

    ---恢复内容开始--- 1.socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏 ...

  6. Linux系统环境下安装dedecms(织梦)提示http500错误的解决办法

    碰到一客户安装DEDE提示http500错误,问题已得到完美解决,下面我分享下 这个解决办法,希望有帮助. 故障状态:正常安装dedecms v5.7 gbk提示http500错误Dede安装环境:一 ...

  7. 远程桌面到 Ubuntu 虚拟机

    安装 Ubuntu 虚拟机,创建端口号为 3389 的 Endpoint. 安装 Gnome 桌面 复制 sudo apt-get update sudo apt-get install ubuntu ...

  8. 机器学习入门KNN近邻算法(一)

    1 机器学习处理流程: 2 机器学习分类: 有监督学习 主要用于决策支持,它利用有标识的历史数据进行训练,以实现对新数据的表示的预测 1 分类 分类计数预测的数据对象是离散的.如短信是否为垃圾短信,用 ...

  9. Intel酷睿前世今生(二)

    上一文,讲述到了酷睿构架的诞生.可以显而易见的知道,酷睿构架其实源于笔记本处理器构架.因为在当年的技术趋势中,因为提升主频而带来的负面影响如发热与高功率已经让普通消费者所不满.然而提升主频并没有提升多 ...

  10. iOS8模糊效果UIVisualEffectView的使用

    iOS8模糊效果UIVisualEffectView的使用 效果: 源码: // // ViewController.m // EffectView // // Created by XianMing ...