#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改编】的更多相关文章

  1. 【转】监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类

    http://lib.csdn.net/article/unity3d/38463 作者:IceFantasyLcj 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的第 ...

  2. 【转】 NGUI 监听按钮除OnClick外其他事件的方法,附简易改编的UIButton类

    http://blog.csdn.net/icefantasylcj/article/details/49450555 大家好,我是雨中祈雨.一直以来,CSDN都是我最好的编程助手.这是我在CSDN的 ...

  3. UVa(1658),Admiral,海军上将,拆点,MCMF

    题目链接:https://uva.onlinejudge.org/external/16/1658.pdf 题意:求1到N的两条路(不能相交),距离和最小. 分析: 第一次做拆点,有点意思.刚开始一直 ...

  4. OpenJudge/Poj 1658 Eva's Problem

    1.链接地址: http://bailian.openjudge.cn/practice/1658 http://poj.org/problem?id=1658 2.题目: 总时间限制: 1000ms ...

  5. NOIP2014无线网络发射器选址改编1

    问题描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形成的网格状,并且相邻的平 ...

  6. APK改之理 手游修改改编安卓程序工具安装使用教程

    APK改之理 手游修改改编安卓程序工具安装使用教程 --APK破解付费程序 apk改之理是pc平台上一款非常好用的apk反编译工具,他将反编译以及签名等功能集中在一起,并且拥有非常人性化的操作界面,如 ...

  7. C语言 · 8皇后问题改编

    8皇后问题(改编) 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋盘. 输出格式 所能得到的最大数字和 样例输入 1 2 3 4 5 ...

  8. 遇到 ORACLE 错误 1658

    在对oracle导入数据时,多次报以下错误: IMP-00003: 遇到 ORACLE 错误 1659ORA-01659: 无法分配超出 1 的 MINEXTENTS (在表空间 ZSTA_DATA_ ...

  9. uva 1658 Admiral (最小费最大流)

    uva 1658 Admiral 题目大意:在图中找出两条没有交集的线路,要求这两条线路的费用最小. 解题思路:还是拆点建图的问题. 首先每一个点都要拆成两个点.比如a点拆成a->a'.起点和终 ...

随机推荐

  1. Python 有序字典简介

    Table of Contents 1. 有序字典-OrderedDict简介 1.1. 示例 1.2. 相等性 1.3. 注意 2. 参考资料 有序字典-OrderedDict简介 示例 有序字典和 ...

  2. 运维Python面试题

    本章内容 1 osodjfoskjdofjsdjfjsdf 123 sdfdfadf   1 2 3 4 5 6 from django.db import models     class user ...

  3. luogu1829 [国家集训队]Crash的数字表格

    被 bs 了姿势水平--好好学习数学QAQQAQQAQ ref #include <iostream> #include <cstring> #include <cstd ...

  4. 【Generate Parentheses】cpp

    题目: Given n pairs of parentheses, write a function to generate all combinations of well-formed paren ...

  5. leetcode 【 Linked List Cycle II 】 python 实现

    公司和学校事情比较多,隔了好几天没刷题,今天继续刷起来. 题目: Given a linked list, return the node where the cycle begins. If the ...

  6. MD5碰撞

    if ( $_POST['param1'] !==$_POST['param2'] && md5($_POST['param1']) === md5($_POST['param2']) ...

  7. python - 接口自动化测试 - MysqlUtil - 数据库操作封装

    # -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: mysql_util.py @ide: PyCharm C ...

  8. C# 调试之 Debug.WriteLine()、Trace.WriteLine()

    Trace 类 和 Debug 类的区别在于,Trace 类会同时在 Debug.Release 模式下起作用,而 Debug 只作用在 Debug 模式下. 区别: 1. 输出跟踪信息 Trace. ...

  9. 设计模式(一)单例模式:2-懒汉模式(Lazy)

    思想: 相比于饿汉模式,懒汉模式实际中的应用更多,因为在系统中,“被用到时再初始化”是更佳的解决方案. 设计思想与饿汉模式类似,同样是持有一个自身的引用,只是将 new 的动作延迟到 getinsta ...

  10. uvalive 6323 状态压缩DP

    思路:dp[i][j][x]表示状态 i 以 j 为结束 得分为 x 的方案数. #include<iostream> #include<cstdio> #include< ...