一次AC。吼啊。

BZOJ权限QAQ

区间加和乘打标记,区间乘x就是区间移动,平衡树解决即可。

查询直接遍历一遍然后算出来

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<ctime>
#include<cstdlib>
#define il inline
#define rg register
#define vd void
#define sta static
#define int long long
#define mod 20130426
#define pr pair<int,int>
using namespace std;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=200010;
int rt=0,ran[maxn],ls[maxn],rs[maxn],num[maxn],add[maxn],mul[maxn],siz[maxn];
il vd Mul(const int&x,const int&y){if(x)num[x]=num[x]*y%mod,mul[x]=mul[x]*y%mod,add[x]=add[x]*y%mod;}
il vd Add(const int&x,const int&y){if(x)num[x]=(num[x]+y)%mod,add[x]=(add[x]+y)%mod;}
il vd down(const int&x){
if(mul[x]^1)Mul(ls[x],mul[x]),Mul(rs[x],mul[x]),mul[x]=1;
if(add[x]) Add(ls[x],add[x]),Add(rs[x],add[x]),add[x]=0;
}
il vd upd(const int&x){siz[x]=siz[ls[x]]+siz[rs[x]]+1;}
il int merge(int x,int y){
if(x==0||y==0){down(x|y);return x|y;}
if(ran[x]<ran[y]){down(x),rs[x]=merge(rs[x],y),upd(x);return x;}
else {down(y),ls[y]=merge(x,ls[y]),upd(y);return y;}
}
il pr split(int x,int k){
if(!x)return make_pair(0,0);
down(x);
pr p=make_pair(ls[x],rs[x]);
if(k==siz[ls[x]]){ls[x]=0,upd(x);p.second=x;return p;}
if(k==siz[ls[x]]+1){rs[x]=0,upd(x);p.first=x;return p;}
if(k<siz[ls[x]]){p=split(ls[x],k);ls[x]=p.second;upd(x);p.second=x;return p;}
else {p=split(rs[x],k-siz[ls[x]]-1);rs[x]=p.first;upd(x);p.first=x;return p;}
}
int s[maxn];
il vd dfs(int x){
down(x);upd(x);
if(ls[x])dfs(ls[x]);
s[++s[0]]=num[x];
if(rs[x])dfs(rs[x]);
}
main(){
int n=200001,m=gi(),l,r;char opt[10];
srand(time(NULL));ran[0]=rand()+1;
for(rg int i=1;i<=n;++i)ran[i]=(ran[i-1]*19260817)&2147483647;
for(rg int i=1;i<=n;++i)siz[i]=1,mul[i]=1,add[i]=0,rt=merge(rt,i);
pr a,b,c,d;
while(m--){
scanf("%s",opt);
if(opt[0]=='m')
if(opt[3]=='x'){
l=gi()+1,r=gi()+1;
a=split(rt,l-1);b=split(a.second,r-l),c=split(b.second,1),d=split(c.second,1);
num[d.first]+=num[c.first],num[c.first]=0;
rt=merge(merge(a.first,c.first),merge(b.first,merge(d.first,d.second)));
}else{
l=gi()+1,r=gi()+1;
a=split(rt,l-1),b=split(a.second,r-l+1);
Mul(b.first,gi());
rt=merge(a.first,merge(b.first,b.second));
}
else if(opt[0]=='a'){
l=gi()+1,r=gi()+1;
a=split(rt,l-1),b=split(a.second,r-l+1);
Add(b.first,gi());
rt=merge(a.first,merge(b.first,b.second));
}else{
r=gi(),l=1;int ans=0;
s[0]=0;
dfs(rt);
for(rg int i=1;i<=n;++i,l=l*r%mod)
ans=(ans+s[i]*l%mod)%mod;
printf("%lld\n",ans);
}
}
return 0;
}

LUOGU3278 [SCOI2013]多项式的运算的更多相关文章

  1. BZOJ3323: [Scoi2013]多项式的运算

    3323: [Scoi2013]多项式的运算 Time Limit: 12 Sec  Memory Limit: 64 MBSubmit: 128  Solved: 33[Submit][Status ...

  2. 2019.03.29 bzoj3323: [Scoi2013]多项式的运算(非旋treap)

    传送门 题意:定义一个无穷项的多项式f(x)f(x)f(x),初始各项系数都为0,现在有几种操作 将xLx^LxL到xRx^RxR这些项的系数乘上某个定值v 将xLx^LxL到xRx^RxR这些项的系 ...

  3. SCOI2013 多项式的运算

    ---恢复内容开始--- 又是一道裸数据结构题. 之前受序列操作的蛋疼写法影响,只用一个tag,不知道怎么记,之后看了下别人的,终于领悟要用两个tag,一个add,一个mul,维护相当简单,想清楚就行 ...

  4. luogu3278/bzoj3323 多项式的运算 (splay)

    mulx的操作,其实就是给r+1的系数+=r的系数,然后删掉r,把l~r-1向右移一位,再插一个0到原来的位置 splay维护区间加和区间乘就好了 (一定要注意做事的顺序,一件事都做完了再去做别的,否 ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. MATLAB符号运算 分类: 图像处理 2015-07-31 22:53 3人阅读 评论(0) 收藏

    1.符号运算 使用MATLAB可以进行多项式乘除运算,也可以进行因式分解. 例1. 多项式乘除运算(x+3)3 >> syms x; >> expand((x+3)^3) an ...

  7. MATLAB符号运算

    1.符号运算 使用MATLAB可以进行多项式乘除运算,也可以进行因式分解. 例1. 多项式乘除运算(x+3)3 >> syms x;>> expand((x+3)^3) ans ...

  8. 多项式相关&&生成函数相关&&一些题目(updating...)

    文章目录 多项式的运算 多项式的加减法,数乘 多项式乘法 多项式求逆 多项式求导 多项式积分 多项式取对 多项式取exp 多项式开方 多项式的除法/取模 分治FFT 生成函数 相关题目 多项式的运算 ...

  9. java-四则运算二

    1.实验目的:是否有乘除法,括号,多项式运算. 2.思路:利用简单的循环switch语句进行循环输出随机数 3.程序源代码: package jiajianchengchu; import java. ...

随机推荐

  1. REST Framework 的用户认证组件

    用户认证流程: 我们要知道这个流程是怎么走的? 认证之后做的什么? 怎么认证?这三个条件 认证流程:就是使用BaseAuthentication这个模块来做认证,判断你登陆成功传递过来的随机字符串是否 ...

  2. 所有文章的测试Demo

    Mqtt C++ Client 测试Demo https://pan.baidu.com/s/1Ue00GYv2SUd8aTquhvOW1w

  3. SQL server数据库的部署

    一.实验目标 1.安装一台SQL  SERVER(第一台),然后克隆再一台(第二台),一共两台,修改两台的主机和IP地址. 2.使用注册的方式,用第二台远程连接第一台 二.实验步骤 1)先打开一台Wi ...

  4. ZT 80-90年代港台300部电视剧 你看过多少?

    80-90年代港台300部电视剧 你看过多少? [复制链接]     噗噗 738主题 18精华 万家金领 发消息   发表于 2010-4-27 09:01:02 |显示全部楼层 1.(珍珠传奇) ...

  5. Django 通过APNS推送消息

    最近手上一个项目需要通过APNS向app推送消息,由于后端采用drf框架,在github上找了好多模块,最终发现pzanitti大神的推送模块 django-push-notifications 比较 ...

  6. 【教程】【FLEX】#004 反射机制

    总结: 目前用到反射的主要有两个方法 1.  getDefinitionByName    //根据类名,返回对象(反射实例化对象) 2.  describeType                 ...

  7. Servlet 启动顺序

    在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是: 标记容器是否在启动的时候就加载这个servlet. 当值为0或者 ...

  8. loli的搜索测试-4

    其实这已经是第四次搜索测试了...只不过上两次测试时我不在学校,扔两个链接吧: 测试-2:https://www.luogu.org/blog/user35178/loli-di-sou-suo-ce ...

  9. python基础整理3——前端

    html概述和基本结构 html概述 HTML意思是超文本标记语言 html基本结构 一个html的基本结构如下: <!DOCTYPE html> <html lang=" ...

  10. ping不通linux服务器排查

    很久没启动linux了,今天打开试了下 ssh  root@192.168.229.128 ping 一直超时 老规矩挨着来排查 检查网络设备器改为Net 模式 重启网络服务 service netw ...