ztz11的noip模拟赛T1:愤怒的XiaoX
链接:
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的更多相关文章
- 20161007 NOIP 模拟赛 T1 解题报告
排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...
- ztz11的noip模拟赛T3:评分系统
代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)
打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...
- 【2019.7.25 NOIP模拟赛 T1】变换(change)(思维+大分类讨论)
几个性质 我们通过推式子可以发现: \[B⇒AC⇒AAB⇒AAAC⇒C\] \[C⇒AB⇒AAC⇒AAAB⇒B\] 也就是说: 性质一: \(B,C\)可以相互转换. 则我们再次推式子可以发现: \[ ...
- 20161022 NOIP模拟赛 T1 解题报告
旅行者问题 [问题描述] lahub是一个旅行者的粉丝,他想成为一个真正的旅行者,所以他计划开始一段旅行.lahub想去参观n个目的地(都在一条直道上).lahub在起点开始他的旅行.第i个目的地和起 ...
- 20161023 NOIP 模拟赛 T1 解题报告
Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...
- 20161004 NOIP 模拟赛 T1 解题报告
第1题 小麦亩产一千八 [问题描述] “有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾……”,话说HYSBZ(Hengyang School for Boys & Zy) ...
- 神奇的NOIP模拟赛 T1 LGTB 玩扫雷
LGTB 玩扫雷 在一个n m 的棋盘上,有位置上有雷(用“*” 表示),其他位置是空地(用“.” 表示).LGTB 想在每个空地上写下它周围8 个方向相邻的格子中有几个雷.请帮助他输出写了之后的棋盘 ...
- ztz11的noip模拟赛T2:查房
链接: https://www.luogu.org/problemnew/show/U46611 思路: 这道题告你n-1条边就是骗你的 部分分也是骗你的 这道题连对边5分钟的事 一个点对另一个点有影 ...
随机推荐
- 基础架构之spring cloud基础架构
这篇文章是给公司设计的微服务基础架构,包括架构设计.部署流程.部署架构.开发Tip等等.这里分享出来,如果对看官们有点用,我就非常的高兴了. 首页 2. 架构设计 3. 部署流程 4. 部署架构 5. ...
- unistd.h文件
转载地址:http://baike.baidu.com/link?url=nEyMMFYevs4yoHgQUs2bcfd5WApHUKx0b1ervi7ulR09YhtqC4txmvL1Ce3FS8x ...
- GPU 编程语言 Harlan
Harlan 是一个声明式的.GPU 领域特定的编程语言.目前主要是用于技术实现和优化的测试用途.该语言很小,用于简化浏览新的分析器和优化. 支持的操作系统: Mac OS X 10.6 (Snow ...
- ZOJ Problem Set – 2321 Filling Out the Team
Time Limit: 2 Seconds Memory Limit: 65536 KB Over the years, the people of the great city of Pi ...
- 用POP动画模拟真实秒钟摆动效果
用POP动画模拟真实秒钟摆动效果 静态图: 动画图: 此处用到了POP中的Spring系列动画,现提供源码如下: SecondClockView.h 与 SecondClockView.m // // ...
- [转发]CPU个数、CPU核心数、CPU线程数
我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与 ...
- 计算机用CMD命令关机建立文件夹 梁华杰
1:进入CMD BJ 2:关机并取消 3:进入D盘 文件管理 创件文件并删除
- 021.4 IO流——字节、字符桥梁(编码解码)
默认使用的就是gbk编码,这里的例子改成了utf8编码 写入—编码 private static void writeText() throws IOException { FileOutputStr ...
- 理解活在Iphone中的那些App (三)
App的生存环境之宏观环境 从用户需求变成一个产品形体的App,是一个曲折的过程.主要的过程大概如此,分析用户需求,从用户需求中提炼出比较重要的部分,然后结合自己的创意,将其转化成产品.投放市场,接受 ...
- 优酷视频上传api及demo代码
1,优酷正常上传流程: 1). create:连接开放平台上传接口服务器,服务器端会返回upload_token以及upload_server_uri.2). create_file:连接上传服务器( ...