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. [转]解决pip安装太慢的问题

    阅读目录 临时使用: 经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解 ...

  2. H3C RIP路由表的更新

  3. 2019-9-2-win10-uwp-列表模板选择器

    title author date CreateTime categories win10 uwp 列表模板选择器 lindexi 2019-09-02 12:57:38 +0800 2018-2-1 ...

  4. 改善Azure App Service托管应用程序性能的几个技巧

    本文介绍了几个技巧,这些技巧可以改善Azure App Service托管应用程序的性能.其中一些技巧是你现在就可以进行的配置变更, 而其他技巧则可能需要对应用程序进行一些重新设计和重构. 开发者都希 ...

  5. ipv6现状,加英文的中括号访问, ipv6测试http://test-ipv6.com

    加英文的中括号就可以,如[2001:4998:c:e33::1004],我发现这是yahoo首页.但并不是所有IPv6网站都可以通过IPv6地址访问,跟IPv4一样,网站服务器端可以只绑定域名,不接受 ...

  6. vue权限控制菜单显示

    对于不同角色显示不同的菜单 思路1: 本地放一份完整的菜单数据,通过后台返回角色的菜单列表两者对比,筛选需要显示的菜单数据绑定,这里有个问题就是路由vue实例初始化就生成了,加载的全部,人为输入地址是 ...

  7. linux 注册一个 PCI 驱动

    为了被正确注册到内核, 所有的 PCI 驱动必须创建的主结构是 struct pci_driver 结构. 这个结构包含许多函数回调和变量, 来描述 PCI 驱动给 PCI 核心. 这里是这个结构的一 ...

  8. CF1151div2(Round 553)

    CF1151div2(Round 553) 思路题大赛 A 少考虑了一种情况,到死没想到 B 貌似我随机化50000次,没找到就无解貌似也过了 感觉随随便便乱搞+分类讨论都可以过的样子 #includ ...

  9. 网摘-获取屏幕dc并且将其画面显示在窗体中

    获取屏幕dc并且将其画面显示在窗体中 HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND. HDC hScreenDC = ::GetDC(hWnd);   // ...

  10. HDU4528 小明捉迷藏 [搜索-BFS]

    一.题意 小明S在迷宫n*m中找大明D和二明E,障碍物X不能走,问你计算是否能在时间t内找到大明和二明 二.分析 2.1与普通的BFS不同,这里可以走回头路,这里应该建立四维的标记数组标记数组,例如v ...