复杂度辣鸡没人权

疯狂爆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. ubuntu安装 LNMP+redis

    一.更新软件源 1.修改软件源为163的源 sudo vim /etc/apt/sources.list 替换源为163的源: deb http://mirrors.163.com/ubuntu/ i ...

  2. PHP5.3之后的新特性【转】

    http://blog.csdn.net/black_ox/article/details/21163193

  3. hdu-2169 Computer(树形dp+树的直径)

    题目链接: Computer Time Limit: 1000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) ...

  4. codeforces 558A A. Lala Land and Apple Trees(水题)

    题目链接: A. Lala Land and Apple Trees time limit per test 1 second memory limit per test 256 megabytes ...

  5. [Shell]grep命令

    我是好文章的搬运工,原文来自ChinaUnix,博主scq2099yt,地址:http://blog.chinaunix.net/uid-22312037-id-4217835.html 一.基本用法 ...

  6. HihoCoder1673 : 01间隔矩阵([Offer收割]编程练习赛41)(单调队列)

    描述 给定一个N × M的01矩阵,小Hi希望从中找到一个01间隔的子矩阵,并且子矩阵的面积越大越好. 例如对于 0101010 1000101 0101010 1010101 0101010 在右侧 ...

  7. 「LOJ#6121」「网络流 24 题」孤岛营救问题(BFS

    题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...

  8. 【LeetCode】064. Minimum Path Sum

    题目: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right w ...

  9. Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态

    ylbtech-Jasper:用户指南 / 设备 / 生命周期管理 / SIM 卡状态 1.返回顶部 1. SIM 卡状态 每个设备都有一个状态,决定了它能否在网络上建立数据连接,并且会影响设备是否计 ...

  10. cocos2dx 3.0 用ClippingNode做游戏的新手引导

    转自:http://blog.csdn.net/star530/article/details/20851263 本篇介绍的是用ClippingNode 做游戏的新手引导,额,或者说是做新手引导的一种 ...