题面

二进制分组,修改把区间拆开丢在后面,合并的时候归并最后两块;查询在对应节点上二分答案

 #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 玄学的更多相关文章

  1. uoj #46[清华集训2014]玄学

    uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...

  2. 【UOJ #46】 【清华集训2014】玄学

    题目描述 巨酱有 n 副耳机,他把它们摆成了一列,并且由 1 到n依次编号.每个耳机有一个玄学值,反映了各自的一些不可名状的独特性能.玄学值都是 0 到 m-1 间的整数.在外界的作用下(包括但不限于 ...

  3. UOJ#46. 【清华集训2014】玄学

    传送门 分析 清华集训真的不是人做的啊嘤嘤嘤 我们可以考虑按操作时间把每个操作存进线段树里 如果现在点x正好使一个整块区间的右端点则更新代表这个区间的点 我们不难发现一个区间会因为不同的操作被分成若干 ...

  4. 【uoj#46】 [清华集训2014] 玄学

      题目传送门:uoj46   题意简述:要求在序列上维护一个操作间支持结合律的区间操作,查询连续一段时间内的操作对单点的作用效果,\(n \leq 10^5,m \leq 6 \times 10^5 ...

  5. Solution -「UOJ #46」玄学

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\) 和 \(q\) 次操作,操作内容如下: 给出 \(l,r,k,b\),声明一个修改方案,表示 ...

  6. UOJ#288:基础数据结构练习题

    题面 UOJ Sol 玄学,不会势能分析 所以 维护区间最大最小值 把开根变成区间减法 如果最大值开根后的变化量和最小值的相等,就直接打个减法\(lazy\) # include <bits/s ...

  7. UOJ Round #8 赴京赶考 解题报告

    算法零 $n,m \le 100, q \le 10$ 的话,直接给网格中的每一个格点都建一个点,然后该怎么最短路就怎么最短路,该怎么并查集+BFS就怎么并查集+BFS. 复杂度 $O(qnm)$,可 ...

  8. 【LeetCode】46. Permutations 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:库函数 方法二:递归 方法三:回溯法 日期 题目地址:h ...

  9. 河南省队选拔 HAOI2015 解题报告

      其实省选在四天前就已经结束了,但由于题目难度略大我到今天上午才补完所有题目……(捂脸逃)考场上很幸运,打完了所有我会写的部分分,最后Round1的110分 + Round2的70分,勉强算是没有被 ...

随机推荐

  1. 20155321 《网络攻防》 Exp4 恶意代码分析

    20155321 <网络攻防> Exp4 恶意代码分析 计划任务监控 在C盘根目录下建立一个netstatlog.bat文件(先把后缀设为txt,保存好内容后记得把后缀改为bat),内容如 ...

  2. 奔跑吧Linux

    刚拿到MiZ702,就被他的"外貌"深深的吸引,核心板加底板的形式让她看上去,强大而神秘-- 华丽的外表之下是否有着与之相当的内含呢,我们拿Linux将其检验一番! 板载的TF卡里 ...

  3. pandas 索引与列相互转化

    1. 准备数据 import pandas as pd from io import StringIO csv_txt = '''"date","player1" ...

  4. 学习JAVA第一章的心得

    我抱着万分期待的心情开始了我第一天的JAVA学习课程,其实在第一开始的时候我对计算机行业便有很高地兴趣了.这主要归功于我真的从很小开始就就接触了电脑.进入学校以来,我就很期待老师会怎样教我们,会怎样带 ...

  5. 设计模式 笔记 策略模式 Strategy

    //---------------------------15/04/28---------------------------- //Strategy 策略模式----对象行为型模式 /* 1:意图 ...

  6. install opencv 2.4.10 with issue :"nvcc fatal : Unsupported gpu architecture 'compute_11'"

    issue: nvcc fatal   : Unsupported gpu architecture 'compute_11'CMake Error at cuda_compile_generated ...

  7. sass:常用备忘

    一.变量 所有变量以$开头 $font_size: 12px; .container{ font-size: $font_size; } 如果变量嵌套在字符串中,需要写在#{}中 $side : le ...

  8. 在 Azure 上部署 Asp.NET Core Web App

    在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App ...

  9. Nginx+IIS分布式部署和负载均衡

    1.IIS中部署2个网站 创建2个网站,端口分别为9001.9002 2.下载Nginx 可以进入Nginx官网进行下载,官网地址: http://nginx.org/,需要下载windows版的 3 ...

  10. [文章存档]Azure上部署的java app在向第三方服务传送中文时出现乱码

    https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-java ...