可以说是数据结构学傻了的典型案例了

昨天跳到这题上

然后思考了一下

噫!好!线段树裸题

然后打完板子,发现\(  n \le 10^9 \)

显然线段树直接做不太行

然后这题又只有普及的难度

然后我就打了神奇的动态开点线段树水过

qwq

之后看题解发现正解是\( O(m^2) \)的暴力

因为常数小跑的更快啊qwq

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int cnt=,tr[<<],tag[<<],lx[<<],rx[<<],n,m,root=;
void pushup(int o){
tr[o]=tr[lx[o]]+tr[rx[o]];
}
void pushdown(int o,int ln,int rn){
if(!lx[o])
lx[o]=++cnt;
if(!rx[o])
rx[o]=++cnt;
if(tag[o]){
tag[lx[o]]+=tag[o];
tag[rx[o]]+=tag[o];
tr[lx[o]]+=tag[o]*ln;
tr[rx[o]]+=tag[o]*rn;
tag[o]=;
}
}
void update(int L,int R,int l,int r,int& o,int c){
if(!o)
o=++cnt;
if(L<=l&&r<=R){
tr[o]+=c*(r-l+);
tag[o]+=c;
return;
}
int mid=(l+r)>>;
pushdown(o,mid-l+,r-mid);
if(L<=mid){
update(L,R,l,mid,lx[o],c);
}
if(R>mid){
update(L,R,mid+,r,rx[o],c);
}
pushup(o);
}
int query(int L,int R,int l,int r,int &o){
if(!o)
o=++cnt;
if(L<=l&&r<=R){
return tr[o];
}
int ans=,mid=(l+r)>>;
pushdown(o,mid-l+,r-mid);
if(L<=mid){
ans+=query(L,R,l,mid,lx[o]);
}
if(R>mid)
ans+=query(L,R,mid+,r,rx[o]);
return ans;
}
void debug(int l,int r,int o){
if(!o)
return;
printf("o=%d l=%d r=%d tag=%d num=%d lx=%d rx=%d\n",o,l,r,tag[o],tr[o],lx[o],rx[o]);
if(l==r)
return;
int mid=(l+r)>>;
debug(l,mid,lx[o]);
debug(mid+,r,rx[o]);
}
signed main(){
scanf("%lld %lld",&n,&m);
for(int i=;i<=m;i++){
int opt;
scanf("%lld",&opt);
if(opt==){
int l,r,k;
scanf("%lld %lld %lld",&l,&r,&k);
update(l,r,,n,root,k);
// debug(1,n,root);
}
else{
int l,r;
scanf("%lld %lld",&l,&r);
printf("%lld\n",query(l,r,,n,root) );
}
}
return ;
}

题解——洛谷P2781 传教(线段树)的更多相关文章

  1. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  2. 洛谷——P2781 传教

    P2781 传教 题目背景 写完暑假作业后,bx2k去找pear玩.pear表示他要去汉中传教,于是bx2k准备跟着去围观. 题目描述 pear把即将接受传教的人排成一行,每个人从左到右的编号为1-n ...

  3. 洛谷P5280 [ZJOI2019]线段树

      https://www.luogu.org/problemnew/show/P5280 省选的时候后一半时间开这题,想了接近两个小时的各种假做法,之后想的做法已经接近正解了,但是有一些细节问题理不 ...

  4. 洛谷 P2391 白雪皑皑 线段树+优化

    题目描述: 现在有 \(N\) 片雪花排成一列. Pty 要对雪花进行$ M $次染色操作,第 \(i\)次染色操作中,把\((i*p+q)%N+1\) 片雪花和第\((i*q+p)%N+1\)片雪花 ...

  5. 【洛谷】【线段树】P1471 方差

    [题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...

  6. 【洛谷】【线段树】P1047 校门外的树

    [题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L ...

  7. 【洛谷】【线段树】P1886 滑动窗口

    [题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共 ...

  8. 【洛谷】【线段树】P3353 在你窗外闪耀的星星

    [题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...

  9. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

随机推荐

  1. hdu 5126 cdq+Treap+BIT

    这题说的是给了三维空间然后操作 寻求在 x1,y1,z1    x2, y2, z2; (x1<x2, y1<y2,z1<z2) 计算出在 以这两个端点为右下和左上端点的方体内的点的 ...

  2. 数据模型Model(I)

    枚举.结构体和协议组成Model //定义一个协议 protocol BaseItemProtocal { var title: String { get set } //属性是可读可写的 var t ...

  3. 联想拯救者win10+ubuntu14.04

    之前是win10+win7,默认win10启动,win7所在磁盘直接格式化即可(如果是win10+unbuntu不能这么搞,据说会导致win10也起不来) 按F2进bios 除了按这里fast boo ...

  4. linux下postgresql的连接数配置

    1.查询当前连接数: select count(*) from pg_stat_activity; 2.查询最大连接数 show max_connections; 3.修改最大连接数 SHOW con ...

  5. leaflet:调用arcgis切片地图服务

    var mymap = L.map('mapid').setView([31.59, 120.29], 7); L.tileLayer('http://map.geoq.cn/ArcGIS/rest/ ...

  6. Porsche Piwis Tester II Diagnostic Tool -Next Generation of PIWIS Tester KTS520

    Porsche Piwis Tester II is the latest inspect equipment of Porsche Company. This is the latest profe ...

  7. Hadoop学习笔记之五:HDFS功能逻辑(1)

    Block Report DataNode会周期性(默认1小时)将自身节点全部block信息发送给NameNode,以让NameNode正确确维护block信息. 在Block Report的数据源D ...

  8. storm的trident编程模型

    storm的基本概念别人总结的, https://blog.csdn.net/pickinfo/article/details/50488226 编程模型最关键最难就是实现局部聚合的业务逻辑聚合类实现 ...

  9. The Little Prince-12/16

    The Little Prince-12/16 今天四六级考完了呢,布吉岛大家考的怎么样,会有好多好多奇葩翻译吧,哈哈哈! 突然放出一条16年的笑笑汪~~~今年的也应该会很快出炉了,段子手们准备好!! ...

  10. Camera2点击对焦实现2

    https://www.aliyun.com/jiaocheng/22218.html 阿里云 >  教程中心   >  android教程 >  Camera2点击对焦实现 Cam ...