复杂度辣鸡没人权

疯狂爆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. python处理txt文件的一种情况

    在txt文本中,以换行符作为标记分段处理txt文件中的内容的方法: with open(path, 'r', encoding='utf-8') as f: for line in f: if lin ...

  2. 日期时间选择器bootstrap-datetimepicker表单组件

    Bootstrap受到很多人的喜欢,它不仅拥有一套完整漂亮的UI,而且爱好者们为其开发扩展了很多有用的插件和主题!让其拥有无限可能! 今天为开发者推荐一款强大,易用的时间日历插件——bootstrap ...

  3. html5--1.15 style元素与HTML样式基础

    html5--1.15 style元素与HTML样式基础 学习要点: 1.引入样式的三种方式2.了解style元素插入内联样式表与内部样式表 1.引入样式的三种方式 1.外部样式表:通过 link元素 ...

  4. hdu-5862 Counting Intersections(线段树+扫描线)

    题目链接: Counting Intersections Time Limit: 12000/6000 MS (Java/Others)     Memory Limit: 65536/65536 K ...

  5. redis设置密码和redis主从复制

    redis设置密码和redis主从复制 一.redis设置密码 1.Redis实用特性 安全性  主从复制(侦听器)事务处理 持久化机制 发布订阅消息 2.安全性:设置客户端连接后进行任何其他指定前需 ...

  6. [转] 编写高效的 CSS 选择器

    高效的CSS已经不是一个新的话题了,也不是我一个非得重拾的话题,但它却是我在Sky公司工作之时,所感兴趣的,关注已久的话题. 有很多人都忘记了,或在简单的说没有意识到,CSS在我们手中,既能很高效,也 ...

  7. BZOJ1878:[SDOI2009]HH的项链

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  8. C# DataGridView的單元格中只能輸入數字

    控件類型:DataGridView 控件名稱:dgvGift_Condition 裏面用到的:IsNumeric.NotePastText.RestoreText 等請參見 前一日志“TextBox中 ...

  9. FZU2056 最大正方形(二分答案)

    Problem 2056 最大正方形 Accept: 171    Submit: 516Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  10. ES5.X相关API和技巧汇总

    https://blog.csdn.net/laoyang360/article/details/77412668