解题: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分,勉强算是没有被 ...
随机推荐
- 【spring】spirng中的常用工具类
一.概述 很多时候,很多工具类其实spring中就已经提供,常用的工具类有: 参考:https://www.cnblogs.com/langtianya/p/3875103.html 内置的resou ...
- c# 淘宝运单查询
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 20155238 2016-2017-2《Java程序设计》课程总结
每周作业链接汇总(按顺序) 预备作业1 预备作业2 预备作业3 第一周作业 第二周作业 第三周作业 第四周作业 第五周作业 第六周作业 第七周作业 第八周作业 第九周作业 第十周作业 自认为写得最好一 ...
- MFC如何为程序添加图标
1.找几幅Ico格式的图片,可以在电脑中查找.ico一般都会找到.然后将ico文件放在工程目录下的res文件夹下. 2.点击菜单栏->编辑->添加资源->导入,选择res文件夹中将要 ...
- StringUtils类方法归纳
StringUtils方法概览 IsEmpty/IsBlank - checks if a String contains text IsEmpty/IsBlank – 检查字符串是否有内容. Tri ...
- P4385 [COCI2009]Dvapravca
首先特判掉蓝点数量\(<2\)的情况.没有蓝点答案就是\(n\),有一个蓝点可以枚举一个红点,选择过这个蓝点和红点的一条线和在无穷远处的平行线(即这条线对应的两个半平面). 这里认为过一个点是与 ...
- Android环境下使用call_usermodehelper()以及调试
有时候设备驱动需要做一些与其他的设备通信的操作,但是驱动本身又不可以去实作,那这个时候就可以通过调用用户态的软件,通过这个软件和其他的设备进行通信. 那在内核态如何去调用用户态的程序呢?call_us ...
- Partition3:分区切换(Switch)
在SQL Server中,对超级大表做数据归档,使用select和delete命令是十分耗费CPU时间和Disk空间的,SQL Server必须记录相应数量的事务日志,而使用switch操作归档分区表 ...
- 关于App自动化执行链接Appium服务包名正确但是报错An unknown server-side error occurred while processing the command
在执行链接Appium服务时连接失败可能原因: 1.报错截图: 2.先检查包名是否正确(正常情况下包名不会错误)通过命令行查看包名:aapt dump badging xxx.apk 3.检查对应包的 ...
- unity中利用纯物理工具制作角色移动跳跃功能
using System.Collections;using System.Collections.Generic;using UnityEngine; public class Player : M ...