复杂度辣鸡没人权

疯狂爆oj

感觉要被众多uoj用户骂了

 #include <bits/stdc++.h>
#define ll long long
#define LS ls[now]?ls[now]:(tr[++NODE]=stru(),ls[now]=NODE)
#define RS rs[now]?rs[now]:(tr[++NODE]=stru(),rs[now]=NODE)
#define mid (l+r>>1)
using namespace std;
int MOD,NODE,KEY,n,m,opt,l,r,x,y;
int root[];
int ls[],rs[],st[],L[],R[],X[],Y[];
struct stru
{
long long k,b;
stru()
{
k=;b=;
}
stru(int K,int B)
{
k=K;b=B;
}
} tr[],alb[];
stru merge(stru x,stru y)
{
return stru(x.k*y.k%MOD,(x.b*y.k+y.b)%MOD);
}
bool is(stru p)
{
return(p.k!= || p.b!=);
}
void add(int now,int l,int r,int x,int y,int p,int q)
{
if(l==x && r==y)
{
tr[now]=merge(tr[now],stru(p,q));
return;
}
if(is(tr[now]))
{
tr[LS]=merge(tr[LS],tr[now]);
tr[RS]=merge(tr[RS],tr[now]);
tr[now]=stru();
}
if(x<=mid) add(LS,l,mid,x,min(mid,y),p,q);
if(y>mid) add(RS,mid+,r,max(mid+,x),y,p,q);
}
int read()
{
int x=;char c=getchar();
while (c<''||c>'')c=getchar();
while (c>=''&&c<='')x=x*+c-'',c=getchar();
return x;
}
int main()
{
KEY=read();
n=read();MOD=read();
for(int i=;i<=n;i++)
st[i]=read();
m=read();
int N=;
int lastans=;
for(int i=,j=,J=;i<=m;i++)
{
opt=read();l=read();r=read();x=read();
if(KEY&)
l^=lastans,r^=lastans;
if(opt==)
{
y=read();
L[++j]=l;R[j]=r;X[j]=x;Y[j]=y;
if(j%N==)
root[++J]=++NODE;
add(root[J],,n,l,r,x,y);
}
if(opt==)
{
if(KEY&)
x^=lastans;
int k,K;ll ret=st[x];
for(k=l;k%N!= && k<=r;k++)
if(L[k]<=x && x<=R[k])
ret=(ret*X[k]+Y[k])%MOD;
if(k<=r)
{
for(K=k/N+;K*N<=r;K++)
{
int now=root[K],l=,r=n,top=;
while(l<r)
{
if(is(tr[now]))
alb[++top]=tr[now];
if(x<=mid)
now=LS,r=mid;
else
now=RS,l=mid+;
}
stru tem=tr[now];
for(int i=top;i;i--)
tem=merge(tem,alb[i]);
// tem=que(root[])
ret=(tem.k*ret+tem.b)%MOD;
}
for(k=(K-)*N+;k<=r;k++)
if(L[k]<=x && x<=R[k])
ret=(ret*X[k]+Y[k])%MOD;
}
printf("%d\n",ret);
// puts("OK");
lastans=ret;
}
}
return ;
}

uoj46玄学的更多相关文章

  1. UOJ46 玄学

    题目 一个比较自然的想法是线段树维护二进制分组. 因为我们询问的是一段连续的操作的积,所以我们可以建一棵线段树,每个节点存储当前区间各个操作的积. 这里的操作的积指的是把一系列操作做完之后区间每个位置 ...

  2. 【BZOJ3821/UOJ46】玄学(二进制分组,线段树)

    [BZOJ3821/UOJ46]玄学(二进制分组,线段树) 题面 BZOJ UOJ 题解 呜,很好的题目啊QwQ. 离线做法大概可以线段树分治,或者直接点记录左右两次操作时的结果,两个除一下就可以直接 ...

  3. [UOJ46][清华集训2014]玄学

    uoj description 给出\(n\)个变换,第\(i\)个变换是将区间中\(l_i,r_i\)的数\(x\)变成\((a_ix+b_i)\mod m\). 每次会新增一个变换,或者查询询问如 ...

  4. UOJ46. 【清华集训2014】玄学

    传送门 Sol 考虑对于操作时间建立线段树,二进制分组 那么现在主要的问题就是怎么合并信息 你发现一个性质,就是每个修改只会在整个区间内增加两个端点 那么我们二进制分组可以得到每个区间内最多只有区间长 ...

  5. UOJ46. 【清华集训2014】玄学 [线段树,二进制分组]

    UOJ 思路 模拟赛出了这题,结果我没学过二进制分组--一波主席树然后空间就爆炸了-- 用线段树维护时间序列,每个节点维护\(a_i\to x_i\times a_i+b_i,i\in [1,n]\) ...

  6. UOJ46 清华集训2014玄学(线段树)

    注意到操作有结合律,容易想到用一个矩形表示第i次操作对第j个位置的数的影响.那么修改是单行内的区间修改,而查询是单列内的区间查询.这样二维线段树上以列为外层行为内层直接打标记就可以维护.然后就喜闻乐见 ...

  7. UOJ46 【清华集训2014】玄学 【时间线段树】

    题目链接:UOJ 这题的时间线段树非常的妙. 对时间建立线段树,修改的时候在后面加,每当填满一个节点之后就合并进它的父亲. 对于一个节点维护序列,发现这是一个分段函数,合并就是归并排序.于是就形成了差 ...

  8. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  9. C++玄学预编译优化

    #pragma GCC diagnostic error "-std=c++11" #pragma GCC optimize("-fdelete-null-pointer ...

随机推荐

  1. tensorflow实现svm多分类 iris 3分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)

    # Multi-class (Nonlinear) SVM Example # # This function wll illustrate how to # implement the gaussi ...

  2. python基础-文本操作

    文件IO #文件的基本操作 1.在python中你可以用file对象做大部分的文件操作 2.一般步骤: 先用python内置的open()函数打开一个文件,并创建一个file对象, 然后调用相关方法进 ...

  3. 【Codeforces】Round #460 E - Congruence Equation 中国剩余定理+数论

    题意 求满足$na^n\equiv b \pmod p$的$n$的个数 因为$n \mod p ​$循环节为$p​$,$a^n\mod p​$循环节为$p-1​$,所以$na^n \mod p​$循环 ...

  4. hls协议(最清晰的讲解)

    今天来介绍一下HLS协议,这个协议是由苹果公司提出并推广开来的.来一段维基百科的定义. HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议.是 ...

  5. Linux下安装二进制版mysql-8.0.15

    1.添加用户## 添加用户组groupadd mysql## 添加用户,指定用户home目录useradd -g mysql mysql -d /data/mysql## 解压下载的mysql二进制包 ...

  6. phpstorm 代码按列对齐

    设置方式: Preference... -> Editor -> CodeStyle -> PHP -> Other -> Align key-value pairs

  7. poj3784 Running Median[对顶堆]

    由于我不会讲对顶堆,所以这里直接传上一个巨佬的学习笔记. 对顶堆其实还是很容易理解的,想这题的时候自己猜做法也能把没学过的对顶堆给想出来.后来了解,对顶堆主要还是动态的在线维护集合$K$大值.当然也可 ...

  8. HDU5692 Snacks

    HDU5692 Snacks Problem Description 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的 ...

  9. 使用django-extension扩展django的manage――runscript命令

    摘要:1.下载安装   1)$easy_installdjango-extensions   2)在INSTALLED_APP中添加'django_extensions'[python]INSTALL ...

  10. 使用webdriver出现的问题:[18796:1808:0730/131103.313:ERROR:install_util.cc(600)] Failed to read HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken: 系统找不到指定的文件。 (0x2) DevTools lis

    1.注册表导致 [5956:4996:0710/155156.898:ERROR:install_util.cc(589)] Unable to create registry key HKLM\SO ...