解题: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分,勉强算是没有被 ...
随机推荐
- Eclispe与JDK
一.Eclispe 1.1 Eclispe发布版本 下面是目前已知的版本代号 (Release)[2015年2月] Eclipse 3.1 版本代号 IO [木卫1,伊奥] Eclipse 3.2 版 ...
- 页面添加友盟(CNZZ)统计和事件追踪
1. 在页面中引入友盟(CNZZ)统计的 JS 代码 <script type="text/javascript"> // 统计 var cnzz_protocol = ...
- [CF1083F]The Fair Nut and Amusing Xor[差分+同余分类+根号分治+分块]
题意 给定两个长度为 \(n\) 的序列 \(\{a_i\}\) 与 \(\{b_i\}\),你需要求出它们的相似度.,我们定义这两个序列的相似度为将其中一个序列转化为另一个序列所需的最小操作次数.一 ...
- [LOJ#6198]谢特[后缀数组+trie+并查集]
题意 给你一个长度为 \(n\) 的字符串,问 \(LCP(i,j)+(w_i\ xor\ w_j)\) 的最大值,其中 \(LCP\) 表示两个后缀的最长公共前缀. \(n\le 10^5\) 分析 ...
- it面试技巧
一:请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验,这些在简历上都有.其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能.最深入研究的知识领域 ...
- Sqlserver_函数介绍
SQL2008 表达式:是常量.变量.列或函数等与运算符的任意组合. 1. 字符串函数 函数 名称 参数 示例 说明 ascii(字符串表达式) select ascii('abc') 返回 97 返 ...
- shell脚本之基础
配置启动界面 vim /etc/inittab/ init3配置网卡 重启生效system-config-network网卡配置文件vim /etc/sysconfig/network-script ...
- 用10分钟,搭建图像处理编程环境,0失败!(python语言,windows系统)
以前,你可能看过很多的文章,开始搭建一个图像处理的编程环境. 结果,按照教程一步一步做的时候,总是出现各种各样的问题. 就算成功了,后续开发过程中要用到不同版本的opencv,不同版本python,更 ...
- 无前趋的顶点优先的拓扑排序方法(JAVA)(转载http://128kj.iteye.com/blog/1706968)
无前趋的顶点优先的拓扑排序方法 该方法的每一步总是输出当前无前趋(即人度为零)的顶点,其抽象算法可描述为: NonPreFirstTopSort(G){//优先输出无前趋的顶点 w ...
- python3与python2使用python原生SimpleHTTPRequestHandler
python3 使用时如下: #!/usr/bin/env python3 #coding=utf-8 from http.server import SimpleHTTPRequestHandler ...