2632. [HZOI 2016] 数列操作d

★★★   输入文件:segment.in   输出文件:segment.out   简单对比
时间限制:3 s   内存限制:512 MB

【题目描述】

一个长度为n的序列,一开始序列数的权值都是0,有m次操作

支持两种操作:

1 L R x,给区间[L,R]内位置为pos的数加上(pos-L)*x

0 L R,查询区间[L,R]内的权值和

最终答案对109+7取模。

【输入格式】

第一行两个数n,m,表示序列长度和操作次数

接下来m行,每行描述一个操作,有如下两种情况:

1 L R x,给区间[L,R]内位置为pos的数加上(pos−L)×x

0 L R,查询区间[L,R]内的权值和

【输出格式】

每一个0操作输出一个整数模109+7

【样例输入】

5 5
0 2 3
1 4 5 1
1 1 5 5
0 1 4
0 2 3

【样例输出】

0
30
15

【提示】

对于30%的数据 n,m<=2000

对于100%的数据,n,m<=300000

保证读入的都是非负整数,所有的x<=10000

【来源】

感谢神犇
非常感谢神犇

非常非常感谢神犇

自动选择评测机
 
gcc/g++4.8.5
gcc/g++4.8.5 -O2
gcc/g++4.8.5(C++11)
gcc/g++4.6.3
gcc/g++4.6.3 -O2

提交代码 Pascal C C++

#include<bits/stdc++.h>
#define ll long long
#define INF 1000000007
#define maxn 300005
using namespace std;
ll S[maxn];
ll lz1[maxn<<],lz2[maxn<<];//lz1 就是记录那个-L *x的 lz2就是记录 pos*x的
ll dat[maxn<<];
void Add(int rt,int l,int r,int ss,int tt,ll qx,ll posx){
if(ss>r||tt<l) return;//判断是否越界
if(ss<=l&&r<=tt){//全部包含
lz1[rt]=(lz1[rt]+qx)%INF;//永久化标记
lz2[rt]=(lz2[rt]+posx)%INF;
dat[rt]=(dat[rt]+qx*(r-l+)%INF+posx*((S[r]-S[l-])%INF)%INF)%INF;// (S[r]-S[l-1])就是那一段等差数列的和 预处理出来了直接作一个差就行了
return;
}
int mid=(l+r)>>;
Add(rt*,l,mid,ss,tt,qx,posx);Add(rt*+,mid+,r,ss,tt,qx,posx);
dat[rt]=(dat[rt*]+dat[rt*+]+lz1[rt]*(r-l+)%INF+lz2[rt]*((S[r]-S[l-])%INF)%INF)%INF;
}
ll Get(int rt,int l,int r,int ss,int tt){
if(ss>r||tt<l) return ;
if(ss<=l&&r<=tt) return dat[rt];
int lll=max(l,ss);
int rr=min(r,tt);
int mid=(l+r)>>;
return (lz1[rt]*(rr-lll+)%INF+lz2[rt]*((S[rr]-S[lll-])%INF)%INF+Get(rt*,l,mid,ss,tt)+Get(rt*+,mid+,r,ss,tt))%INF;
}
int main(){
freopen("segment.in","r",stdin);freopen("segment.out","w",stdout);
int n,m;scanf("%d%d",&n,&m);//输入 不说了 哈哈
for(int i=;i<=n;i++) S[i]=S[i-]+i;//这里就是预处理一个前缀和
for(int i=;i<=m;i++){
int Type;scanf("%d",&Type);
if(Type){
int l,r;ll x,posx;scanf("%d%d%lld",&l,&r,&x);
posx=(INF-l)*x%INF;//posx 就是那个-L 这里加上一个INF 是因为——L是负数 会炸的!!
Add(,,n,l,r,posx,x);
}
else{
int l,r;scanf("%d%d",&l,&r);
printf("%lld\n",Get(,,n,l,r)%INF);
}
}
return ;
}

cogs 2632. [HZOI 2016] 数列操作d的更多相关文章

  1. COGS 2633. [HZOI 2016] 数列操作e

    [题目描述] 一个长度为n的序列,一开始序列数的权值都是0,有m次操作 支持两种操作, 1 L R x,给区间[L,R]内,第一个数加x,第二个数加2^2⋅x,第三个数加3^2⋅x...第R-L+1个 ...

  2. 2018.08.04 cogs2633. [HZOI 2016]数列操作e(线段树)

    传送门 支持区间加w(i−ql+1)2" role="presentation" style="position: relative;">w(i ...

  3. 2018.07.30 cogs2632. [HZOI 2016] 数列操作d(线段树)

    传送门 线段树基本操作 区间加等差数列,维护区间和. 对于每个区间维护等差数列首项和公差,易证这两个东西都是可合并的,然后使用小学奥数的知识就可以切掉这题. 代码: #include<bits/ ...

  4. COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解

    大意: [HZOI 2016]公路修建 给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k( ...

  5. cogs——2478. [HZOI 2016]简单的最近公共祖先

    2478. [HZOI 2016]简单的最近公共祖先 ★☆   输入文件:easy_LCA.in   输出文件:easy_LCA.out   简单对比时间限制:2 s   内存限制:128 MB [题 ...

  6. COGS 2199. [HZOI 2016] 活动投票

    2199. [HZOI 2016] 活动投票 ★★   输入文件:hztp.in   输出文件:hztp.out   简单对比时间限制:0.5 s   内存限制:2 MB [题目描述] 衡中活动很多, ...

  7. COGS 2485. [HZOI 2016]从零开始的序列

    2485. [HZOI 2016]从零开始的序列 ★★   输入文件:sky_seq.in   输出文件:sky_seq.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] ...

  8. COGS 2334. [HZOI 2016]最小函数值

    时间限制:1 s   内存限制:128 MB [题目描述] 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Aix2+Bix+Ci(x∈N∗).给定这些Ai.Bi和Ci,请求出所有函数的所 ...

  9. cogs——2419. [HZOI 2016]公路修建2

    2419. [HZOI 2016]公路修建2 ★☆   输入文件:hzoi_road2.in   输出文件:hzoi_road2.out   简单对比时间限制:1 s   内存限制:128 MB [题 ...

随机推荐

  1. 困扰的问题终于解决了-docker时区不正确的问题修改记

    前一阵子有一台服务器,mysql的时间比北京时间晚了8个小时.我知道是时区的问题,但是不知道为什么弄成这样,宿主机没有问题,后来一看mysql的docker,时区是错的. mybatis-plus打印 ...

  2. H3C 公有地址和私有地址

  3. 解决:javac: 无效的目标发行版: 1.8

    原 解决:javac: 无效的目标发行版: 1.8 2017年06月14日 16:21:12 代码也文艺 阅读数 44795 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  4. gu集合

    离散型随机变量的一切可能的取值  与对应的概率  乘积之和称为该离散型随机变量的数学期望,本题期望是概率乘得分之和 数列是递增的,可以枚举第二小的数,假设选第i个数为第2小的数,则第1小的数有i-1种 ...

  5. 2019-8-31-git-上传当前分支

    title author date CreateTime categories git 上传当前分支 lindexi 2019-08-31 16:55:59 +0800 2018-05-08 09:2 ...

  6. HDU 6444 Neko's loop(单调队列)

    Neko has a loop of size nn. The loop has a happy value aiai on the i−th(0≤i≤n−1)i−th(0≤i≤n−1) grid.  ...

  7. CountDownLatch 部分加载和同时并发业务。

    按顺序部分加载: import java.util.concurrent.CountDownLatch; /** * @Title: ThreadCountDownTest.java * @Descr ...

  8. java面试-泛型

    1.什么是泛型?泛型有什么作用?   泛型就是参数化类型,也就是所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法.   在泛型出现之前, ...

  9. DEVOPS技术实践_04:Jenkins参数化构建

    一.参数化构建 1.1 各个参数的信息 凭据参数存储一个用户的账号密码信息,等等,运用最多的是选项参数 1.2 使用选项参数 构建已经变成参数化构建 1.3 获取这个值,修改Jenkinsfile文件 ...

  10. 一天入门 Python 的一些心得

    1. 前言 好久没写文了.最近在搞一些好玩的技术用到了 Python .我原以为要花些时日,谁知道第一天入门之后便没有再刻意地去学习它了.这里就写写其中的一些关键点吧.如果我去学一门语言不是因为它火了 ...