jzyzOJ 1658【bzoj1798改编】
#include<iostream>
#include<cstring>
#include<cstdio>
#include<ctime>
#include<algorithm>
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define INF 2100000000
#define maxn 100100
#define intt long long
#define mo 5201314
using namespace std;
intt ax,ay,x,y,q,c;
intt n,m;
struct qaq{
intt maxx,deladd;
intt delx;
}tree[maxn*]; intt read(){
intt f=;
intt k=;
char c=getchar();
while(c>''||c<''){
if(c=='-') f=-;
c=getchar();
}
while(c>=''&&c<=''){
k=(k<<)+(k<<)+c-'';
c=getchar();
}
return f*k;
} void push_down(intt id,intt l,intt r){
if(tree[id].delx==&&tree[id].deladd==) return;
intt tad=tree[id].deladd;
intt txx=tree[id].delx;
intt mid=(l+r)>>;
tree[L(id)].deladd=(tree[L(id)].deladd*txx+tad)%mo;
tree[R(id)].deladd=(tree[R(id)].deladd*txx+tad)%mo;
tree[L(id)].delx=(tree[L(id)].delx*txx)%mo;
tree[R(id)].delx=(tree[R(id)].delx*txx)%mo;
tree[L(id)].maxx=(tree[L(id)].maxx*txx+(mid-l+)*tad)%mo;
tree[R(id)].maxx=(tree[R(id)].maxx*txx+(r-(mid+)+)*tad)%mo;
tree[id].deladd=;
tree[id].delx=;
return;
} void build(intt l,intt r,intt id,intt v){
if(l>y||r<x) return;
tree[id].delx=;
tree[id].deladd=;
if(x<=l&&r<=y){
tree[id].maxx=v;
//cout<<v<<endl;
return;
}
intt mid=(l+r)>>;
build(l,mid,L(id),v);
build(mid+,r,R(id),v);
tree[id].maxx=(tree[L(id)].maxx+tree[R(id)].maxx)%mo;
//cout<<tree[id].maxx<<endl;
return;
} void updatax(intt l,intt r,intt id,intt v){
if(l>y||r<x) return;
if(x<=l&&r<=y){
tree[id].deladd=(tree[id].deladd*v)%mo;
tree[id].delx=(tree[id].delx*v)%mo;
tree[id].maxx=(tree[id].maxx*v)%mo;
return;
}
push_down(id,l,r);
intt mid=(l+r)>>;
updatax(l,mid,L(id),v);
updatax(mid+,r,R(id),v);
tree[id].maxx=(tree[L(id)].maxx+tree[R(id)].maxx)%mo;
return;
} void updataadd(intt l,intt r,intt id,intt v){
if(l>y||r<x) return;
if(x<=l&&r<=y){
tree[id].deladd=(tree[id].deladd+v)%mo;
tree[id].maxx=(tree[id].maxx+(r-l+)*v)%mo;
return;
}
push_down(id,l,r);
intt mid=(l+r)>>;
updataadd(l,mid,L(id),v);
updataadd(mid+,r,R(id),v);
tree[id].maxx=(tree[L(id)].maxx+tree[R(id)].maxx)%mo;
return;
} intt findit(int l,int r,int id){
if(l>y||r<x) return ;
if(x<=l&&r<=y){
//cout<<tree[id].
return tree[id].maxx%mo;
}
push_down(id,l,r);
intt mid=(l+r)>>;
intt t1=findit(l,mid,L(id));
intt t2=findit(mid+,r,R(id));
return (t1+t2)%mo;
} int main(){
//freopen("a.txt","r",stdin);
//freopen("b.txt","w",stdout);
memset(tree,,sizeof(tree));
n=read();
m=read();
//cout<<n<<' '<<m<<endl;
for(int i=;i<=n;++i){
c=read();
x=y=i;
build(,n,,c);
}
for(int i=;i<=m;++i){
q=read();
ax=read();
ay=read();
if(q==){
x=ax;
y=ay;
c=read();
updatax(,n,,c);
}
else if(q==){
x=ax;
y=ay;
c=read();
updataadd(,n,,c);
}
else{
x=ax;
y=ay;
cout<<findit(,n,)%mo<<endl;
}
}
//cout<<"Runtime:"<<double(1.0*clock()/1000.0)<<"S!"<<endl;
return ;
}
先放代码.....
这道题的难点在于1号操作,也就是乘法。裸的线段树,但是是双偏移量,还要控制好次序,代码慢慢看就行了。。
jzyzOJ 1658【bzoj1798改编】的更多相关文章
- 【转】监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类
http://lib.csdn.net/article/unity3d/38463 作者:IceFantasyLcj 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的第 ...
- 【转】 NGUI 监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类
http://blog.csdn.net/icefantasylcj/article/details/49450555 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的 ...
- UVa(1658),Admiral,海军上将,拆点,MCMF
题目链接:https://uva.onlinejudge.org/external/16/1658.pdf 题意:求1到N的两条路(不能相交),距离和最小. 分析: 第一次做拆点,有点意思.刚开始一直 ...
- OpenJudge/Poj 1658 Eva's Problem
1.链接地址: http://bailian.openjudge.cn/practice/1658 http://poj.org/problem?id=1658 2.题目: 总时间限制: 1000ms ...
- NOIP2014无线网络发射器选址改编1
问题描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形成的网格状,并且相邻的平 ...
- APK改之理 手游修改改编安卓程序工具安装使用教程
APK改之理 手游修改改编安卓程序工具安装使用教程 --APK破解付费程序 apk改之理是pc平台上一款非常好用的apk反编译工具,他将反编译以及签名等功能集中在一起,并且拥有非常人性化的操作界面,如 ...
- C语言 · 8皇后问题改编
8皇后问题(改编) 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋盘. 输出格式 所能得到的最大数字和 样例输入 1 2 3 4 5 ...
- 遇到 ORACLE 错误 1658
在对oracle导入数据时,多次报以下错误: IMP-00003: 遇到 ORACLE 错误 1659ORA-01659: 无法分配超出 1 的 MINEXTENTS (在表空间 ZSTA_DATA_ ...
- uva 1658 Admiral (最小费最大流)
uva 1658 Admiral 题目大意:在图中找出两条没有交集的线路,要求这两条线路的费用最小. 解题思路:还是拆点建图的问题. 首先每一个点都要拆成两个点.比如a点拆成a->a'.起点和终 ...
随机推荐
- Go语言之反射(三)
结构体转JSON JSON格式是一种用途广泛的对象文本格式.在Go语言中,结构体可以通过系统提供的json.Marshal()函数进行序列化.为了演示怎么样通过反射获取结构体成员以及各种值的过程,下面 ...
- 【Linked List Cycle II】cpp
题目: Given a linked list, return the node where the cycle begins. If there is no cycle, return null. ...
- 编写高性能React组件-传值篇
很多人在写React组件的时候没有太在意React组件的性能,使得React做了很多不必要的render,现在我就说说该怎么来编写搞性能的React组件. 首先我们来看一下下面两个组件 import ...
- LeetCode with Python -> Linked List
21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list s ...
- ALPHA 冲刺(一)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内 ...
- 【转】UGUI EventSystem
EventSystem The EventSystem is a way of sending events to objects in the application based on inpu ...
- 【bzoj1367】[Baltic2004]sequence 可并堆
题目描述 输入 输出 一个整数R 样例输入 7 9 4 8 20 14 15 18 样例输出 13 题解 可并堆,黄源河<左偏树的特点及其应用>Page 13例题原题 #include & ...
- 利用jQuery无缝滚动插件liMarquee实现图片(链接)和文字(链接)向右无缝滚动(兼容ie7+)
像新闻类的版块经常要求一条条的新闻滚动出现,要实现这种效果,可以使用jQuery无缝滚动插件liMarquee. 注意: 1. 它的兼容性是IE7+,及现代浏览器. 2. 引用的jquery的版本最好 ...
- AutoDispose代替RxLifecycle优雅的解决RxJava内存泄漏问题
使用过Rxjava的小伙伴都知道,在使用RxJava时如果处理不当,很可能会产生内存泄漏的问题. 我们使用rxjava最大的原因是响应式编程使我们的异步操作代码变得很优雅,在Android中,也使线程 ...
- BZOJ 4826 [Hnoi2017]影魔 ——扫描线 单调栈
首先用单调栈和扫描线处理出每一个数左面最近的比他大的数在$l[i]$,右面最近的比他大的数$r[i]$. 然后就可以考虑每种贡献是在什么时候产生的. 1.$(l[i],r[i])$产生$p1$的贡献 ...