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分钟的事 一个点对另一个点有影 ...
随机推荐
- Java学习笔记(3)----网络套接字服务器多线程版本
本例给出一个客户端程序和一个服务器程序.客户端向服务器发送数据.服务器接收数据,并用它来生成一个结果,然后将这个结果返回给客户端.客户端在控制台上显示结果.在本例中,客户端发送的数据是圆的半径,服务器 ...
- OpenCV获取与设置像素点的值的几个方法
Title: OpenCV OpenCV像素值的获取与设置 Fn 1 : 使用 Mat 中对矩阵元素的地址定位的知识 (参考博文:OpenCV中对Mat里面depth,dims,channels,st ...
- Install dotNet Core on Mac
1. 按照官方页面进行安装 https://www.microsoft.com/net/core#macos 2. 在运行"brew link --force openssl" 时 ...
- CentOS 7 Apache 多端口部署 Web Apps 指南
转载自简书,原作者xuyan0,链接https://www.jianshu.com/p/b34c78bf9bf0,如有侵权,请联系删除 导语 Apache web 服务器运行着互联网上超过半数的活跃的 ...
- centos django+Nginx+uwsgi部署
第五天 部署python3+uwsgi+nginx的博客系统 ================================ mysql基本命令 mysql mysql -p mysqladmin ...
- 算法之冒泡排序(Java语言)
冒泡排序(英语:Bubble Sort) 是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说 ...
- 3.Bootstrap CSS 概述
1.HTML 5 文档类型(Doctype) Bootstrap 使用了一些 HTML5 元素和 CSS 属性.为了让这些正常工作,您需要使用 HTML5 文档类型(Doctype). 因此,请在使用 ...
- Python学习---网页爬虫[下载图片]
爬虫学习--下载图片 1.主要用到了urllib和re库 2.利用urllib.urlopen()函数获得页面源代码 3.利用正则匹配图片类型,当然正则越准确,下载的越多 4.利用urllib.url ...
- Python学习---django知识补充之CBV
Django知识补充之CBV Django: url --> def函数 FBV[function based view] 用函数和URL进行匹配 url --> ...
- Python学习---django多对多自定义第三方表180206
案例一: # version: python3.2.5 # author: 'FTL1012' # time: 2018/2/6 16:25 from django.db import models ...