解题:UOJ #46 玄学
二进制分组,修改把区间拆开丢在后面,合并的时候归并最后两块;查询在对应节点上二分答案
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,Max=1e5;
struct a{int p,k,b;}ope[N*];
int seq[*N],lef[*N],rig[*N];
int n,T,t1,t2,t3,t4,op,ans,cnt,tot,mod,oni;
void Change(int nde,int l,int r,int ll,int rr,int k,int b)
{
if(l==r)
{
lef[nde]=cnt+;
if(ll>) ope[++cnt]=(a){ll-,,};
ope[++cnt]={rr,k,b};
if(rr<n) ope[++cnt]=(a){n,,};
rig[nde]=cnt;
}
else
{
int mid=(l+r)>>,ls=*nde,rs=*nde+,l1,l2,r1,r2;
if(tot<=mid) Change(ls,l,mid,ll,rr,k,b);
else Change(rs,mid+,r,ll,rr,k,b);
if(tot>=r)
{
lef[nde]=cnt+,l1=lef[ls],l2=lef[rs],r1=rig[ls],r2=rig[rs];
while(l1<=r1&&l2<=r2)
{
ope[++cnt]=(a){min(ope[l1].p,ope[l2].p),
1ll*ope[l1].k*ope[l2].k%mod,
(1ll*ope[l2].k*ope[l1].b+ope[l2].b)%mod};
if(ope[l1].p==ope[l2].p) l1++,l2++;
else ope[l1].p<ope[l2].p?l1++:l2++;
}
rig[nde]=cnt;
}
}
}
void Calc(int nde,int tsk)
{
int l=lef[nde],r=rig[nde],p=;
while(l<=r)
{
int mid=(l+r)>>;
if(ope[mid].p>=tsk) p=mid,r=mid-;
else l=mid+;
}
ans=(1ll*ans*ope[p].k+ope[p].b)%mod;
}
void Query(int nde,int l,int r,int ll,int rr,int tsk)
{
if(l>rr||r<ll)
return ;
else if(l>=ll&&r<=rr)
Calc(nde,tsk);
else
{
int mid=(l+r)>>,ls=*nde,rs=*nde+;
Query(ls,l,mid,ll,rr,tsk),Query(rs,mid+,r,ll,rr,tsk);
}
}
int main()
{
scanf("%d",&oni),oni&=;
scanf("%d%d",&n,&mod);
for(int i=;i<=n;i++)
scanf("%d",&seq[i]);
scanf("%d",&T);
while(T--)
{
scanf("%d",&op);
if(op==)
{
scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
t1^=ans*oni,t2^=ans*oni,tot++;
Change(,,Max,t1,t2,t3,t4);
}
else
{
scanf("%d%d%d",&t1,&t2,&t3);
t1^=ans*oni,t2^=ans*oni,t3^=ans*oni;
ans=seq[t3],Query(,,Max,t1,t2,t3);
printf("%d\n",ans);
}
}
return ;
}
解题:UOJ #46 玄学的更多相关文章
- uoj #46[清华集训2014]玄学
uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...
- 【UOJ #46】 【清华集训2014】玄学
题目描述 巨酱有 n 副耳机,他把它们摆成了一列,并且由 1 到n依次编号.每个耳机有一个玄学值,反映了各自的一些不可名状的独特性能.玄学值都是 0 到 m-1 间的整数.在外界的作用下(包括但不限于 ...
- UOJ#46. 【清华集训2014】玄学
传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...
- 【uoj#46】 [清华集训2014] 玄学
题目传送门:uoj46 题意简述:要求在序列上维护一个操作间支持结合律的区间操作,查询连续一段时间内的操作对单点的作用效果,\(n \leq 10^5,m \leq 6 \times 10^5 ...
- Solution -「UOJ #46」玄学
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\) 和 \(q\) 次操作,操作内容如下: 给出 \(l,r,k,b\),声明一个修改方案,表示 ...
- UOJ#288:基础数据结构练习题
题面 UOJ Sol 玄学,不会势能分析 所以 维护区间最大最小值 把开根变成区间减法 如果最大值开根后的变化量和最小值的相等,就直接打个减法\(lazy\) # include <bits/s ...
- UOJ Round #8 赴京赶考 解题报告
算法零 $n,m \le 100, q \le 10$ 的话,直接给网格中的每一个格点都建一个点,然后该怎么最短路就怎么最短路,该怎么并查集+BFS就怎么并查集+BFS. 复杂度 $O(qnm)$,可 ...
- 【LeetCode】46. Permutations 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:库函数 方法二:递归 方法三:回溯法 日期 题目地址:h ...
- 河南省队选拔 HAOI2015 解题报告
其实省选在四天前就已经结束了,但由于题目难度略大我到今天上午才补完所有题目……(捂脸逃)考场上很幸运,打完了所有我会写的部分分,最后Round1的110分 + Round2的70分,勉强算是没有被 ...
随机推荐
- JS跨浏览器的事件处理
1. 事件流 事件:用户或浏览器自身执行的某种动作.如click(点击事件).mouse***(鼠标事件). 事件流:页面中接收事件的顺序,也可理解为事件在页面中传播的顺序. DOM事件流包括三个阶段 ...
- Window下mysql环境配置问题整理
Window下mysql环境配置问题整理 参考如下链接. 无需安装解压版mysql包 创建选项配置 首次启动服务 用mysqld初始化目录 安装后设置和测试 启动服务错误信息 管理员模式打开cmd m ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)Java语言中System.out.print与Log的比较
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 前言 距离上一次更新博客有一段时间了,主要是因为最近有开发任务,另外 ...
- 一个Python开源项目-腾讯哈勃沙箱源码剖析(上)
前言 2019年来了,2020年还会远吗? 请把下一年的年终奖发一下,谢谢... 回顾逝去的2018年,最大的改变是从一名学生变成了一位工作者,不敢说自己多么的职业化,但是正在努力往那个方向走. 以前 ...
- 初级字典树查找在 Emoji、关键字检索上的运用 Part-2
系列索引 Unicode 与 Emoji 字典树 TrieTree 与性能测试 生产实践 在有了 Unicode 和 Emoji 的知识准备后,本文进入编码环节. 我们知道 Emoji 是 Unico ...
- Js_实现3D球体旋转
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [dx11]利用SpriteFont绘制中文--本地化文本
1.下载DirectX11 Tool Kit SDK,解压后编译,生成DirectXTK.lib库文件和MakeSpriteFont应用工具; 2.在Dx11环境基础上,用生成的库文件搭建XTK环境; ...
- Unity攻击敌人时产生泛白效果
Shader的代码如下,主要是将透明度为1的像素点输出为白色,其中_BeAttack表示角色被攻击的泛白状态 // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_M ...
- 二叉树 c++
树 非空树 有一个(root)根节点r 其余节点可分为m个互不相交的有限集(子树)T1....Tm 具有n个节点的树,具有(n-1)条连接(指针域),需要构成结构体,尽可能减少空间域的浪费,使用儿子兄 ...
- mysql学习(1)
开始我们基础的mysql学习 第一部分:补充知识 1. 昨天讲到的mysql初始化密码为空,今天又get到一种新的方法 Mysql安装后需要做的 Mysql安装成功后,默认的root用户密码为空,你可 ...