NEFU OJ 1266-快乐的雨季-线段树【题解】
题目链接:problem-1266 快乐的雨季
简单说明:
模板题——线段树的区间更新(更新,不是替换)、区间查询。没有什么难以理解的。值得注意的是,数据规模最大的情况下每个点会达到1e9这样子,那么区间和不用long long会溢出。还有多组输入,数组要清空。
my code:
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include <string> 5 #include <cstdio> 6 #define lson l,mid,k<<1 7 #define rson mid+1,r,k<<1|1 8 #define mset(a,val) memset(a,val,sizeof(a)) 9 using namespace std; 10 typedef long long ll; 11 const int M=1e5+5; 12 13 ll tr[M<<2],lazy[M<<2]; 14 int n,m; 15 16 void pup(int k) 17 { 18 tr[k]=tr[k<<1]+tr[k<<1|1]; 19 } 20 21 void pdown(int len,int k) 22 { 23 24 lazy[k<<1]+=lazy[k]; 25 lazy[k<<1|1]+=lazy[k]; 26 tr[k<<1]+=lazy[k]*(len-(len>>1)); 27 tr[k<<1|1]+=lazy[k]*(len>>1); 28 lazy[k]=0; 29 30 } 31 32 void build(int l,int r,int k) 33 { 34 if(l==r) 35 { 36 tr[k]=lazy[k]=0; 37 return ; 38 } 39 int mid=(l+r)>>1; 40 build(lson); 41 build(rson); 42 pup(k); 43 } 44 45 void range_add(int L,int R,int addv,int l,int r,int k) 46 { 47 if(L<=l&&r<=R) 48 { 49 lazy[k]+=(ll)addv; 50 tr[k]+=(ll)addv*(r-l+1); 51 return ; 52 } 53 if(lazy[k]) 54 pdown(r-l+1,k); 55 int mid=(l+r)>>1; 56 if(L<=mid) 57 range_add(L,R,addv,lson); 58 if(mid<R) 59 range_add(L,R,addv,rson); 60 pup(k); 61 } 62 63 ll range_ask(int L,int R,int l,int r,int k) 64 { 65 if(L<=l&&r<=R) 66 return tr[k]; 67 if(lazy[k]) 68 pdown(r-l+1,k); 69 ll res=0; 70 int mid=(l+r)>>1; 71 if(L<=mid) 72 res+=range_ask(L,R,lson); 73 if(mid<R) 74 res+=range_ask(L,R,rson); 75 return res; 76 } 77 78 int main() 79 { 80 while(~scanf("%d%d",&n,&m)) 81 { 82 mset(tr,0); 83 mset(lazy,0); 84 build(1,n,1); 85 int x,y,val; 86 while(m--) 87 { 88 scanf("%d%d%d",&x,&y,&val); 89 range_add(x,y,val,1,n,1); 90 printf("%lld\n",range_ask(x,y,1,n,1)); 91 } 92 } 93 return 0; 94 }
区间更新、查询
转载于:https://www.cnblogs.com/Ycourage/p/9664573.html
NEFU OJ 1266-快乐的雨季-线段树【题解】相关推荐
- NEFU 1266 快乐的雨季 (线段树)
题意: 中文 思路: 线段树基础题当然亦可以分块做 代码: 线段树: #include <bits/stdc++.h> using namespace std; #define ls l, ...
- HDU 1556 Color the Ball 线段树 题解
本题使用线段树自然能够,由于区间的问题. 这里比較难想的就是: 1 最后更新须要查询全部叶子节点的值,故此须要使用O(nlgn)时间效率更新全部点. 2 截取区间不能有半点差错.否则答案错误. 这两点 ...
- 【XSY3490】线段树(广义线段树,树上莫队)
题面 线段树 题解 本题分两 Part 走. Part 1 我们需要解决: 如何在广义线段树上快速区间定位节点. 对于有 nnn 个叶子节点.共 2n−12n-12n−1 个节点的广义线段树 AAA, ...
- 蒟蒻君的刷题日记Day12(线段树专题T4):P8082 [COCI2011-2012#4] KEKS 线段树版题解
解题思路 看题解区的大佬们用的都是单调栈,本蒟蒻献上一篇线段树题解. 整个数最大,首先位数是确定的,则肯定优先考虑高位大小. 大体思路就是从前向后依次求出每一位的值(好像是废话). 对于第 iii 位 ...
- [BZOJ4811][Ynoi2017]由乃的OJ 树链剖分+线段树
4811: [Ynoi2017]由乃的OJ Time Limit: 6 Sec Memory Limit: 256 MB Submit: 405 Solved: 134 [Submit][Stat ...
- BZOJ-4811: [Ynoi2017]由乃的OJ (树链剖分 线段树维护区间操作值 好题)
4811: [Ynoi2017]由乃的OJ Time Limit: 6 Sec Memory Limit: 256 MB Submit: 366 Solved: 118 [Submit][Stat ...
- NUIST OJ 1350-1352 面朝大海,春暖花开【初识线段树】
NUIST OJ 1350-1352 面朝大海,春暖花开 NUIST OJ 1350-1352 面朝大海春暖花开 NUIST OJ 1350 面朝大海 春暖花开 基础版 NUIST OJ 1351 面 ...
- 线段树(假)练习题一(学校OJ的题)
Description 桌子上零散地放着若干个盒子,桌子的后方是一堵墙.如右图所示.现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上.问影子的总宽度是多少? Sample Input 20 ...
- [BZOJ4811][YNOI2017]由乃的OJ(树链剖分+线段树)
起床困难综合症那题,只要从高往低贪心,每次暴力跑一边看这一位输入0和1分别得到什么结果即可. 放到序列上且带修改,只要对每位维护一个线段树,每个节点分别记录0和1从左往右和从右往左走完这段区间后变成的 ...
最新文章
- 自定义msi安装包的执行过程
- 构造代码块会想你所想
- kubeadm安装K8S单master双节点集群
- 计算机二级access模考软件_计算机二级考前通关大礼包来啦!各科目模考软件、视频教程,更有往年真题、最新考纲等打包送!...
- 软考复习之路—组成原理
- Linux 进程管理数据结构
- 零基础科普:4种简单推荐算法背后的原理
- 狼真来了!黑客利用SS7漏洞将网银用户洗劫一空
- ssh远程访问失败 Centos7
- tomcat8+linux+IDEA配置远程代码调试
- ASP.NET WEB API简介
- EDEM中对几何体(机械设备)表面的精确受力分析
- 数字证书如何写入到ukey_ukey身份认证步骤
- 如何解决浏览器被网站劫持
- mysql in数量限制_SQL语句中in的个数限制为1000
- 二阶魔方还原 - 4步2公式
- kanzi学习第二天-----创建一个状态机
- 赞!华为19级大牛分享503NoSQL进阶笔记,横扫一切
- 3682. 宇恒棋 (华师月赛)
- SSL: CERTIFICATE_VERIFY_FAILED