线段树(结构体建法_QAQ)
线段树(结构体)模板
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<map>
#include<cmath>
#include<string>
using namespace std;
typedef long long ll;
int ans;
struct node
{int l, r, w;int f;
};
struct node tree[50000 * 4 + 1];
void BuildSegmentTree(int k, int l, int r) // 建线段树
{tree[k].l = l;tree[k].r = r;if(l == r){scanf("%lld", &tree[k].w);return ;}int m = (tree[k].l + tree[k].r) >> 1;BuildSegmentTree(k << 1, l, m);BuildSegmentTree(k << 1 | 1, m + 1, r);tree[k].w = tree[k << 1].w + tree[k << 1 | 1].w;
}
void down(int k) // 懒标记
{tree[k << 1].f += tree[k].f;tree[k << 1 | 1].f += tree[k].f;tree[k << 1]. w += tree[k].f * (tree[k << 1].r - tree[k <<1].l + 1);tree[k << 1 |1].w += tree[k].f * (tree[k << 1| 1].r - tree[k << 1| 1].l + 1);tree[k].f = 0;
}
void Single_Point_Modification(int k, int x, int y) // 单点修改
{if(tree[k].l == tree[k].r){tree[k].w += y;return ;}int m = (tree[k].l + tree[k].r) >> 1;if(x <= m) Single_Point_Modification(k << 1,x, y);else Single_Point_Modification(k << 1 | 1, x, y);tree[k].w = tree[k << 1].w + tree[k << 1 | 1]. w;
}
void Single_Point_Query(int k, int x) // 单点查询
{if(tree[k].l == tree[k].r){ans = tree[k].w;return ;}if(tree[k].f) down(k);int m = (tree[k].l + tree[k].r) >> 1;if(x <= m) Single_Point_Query(k << 1, x);else Single_Point_Query(k << 1 | 1, x);
}
void Interval_modification(int k, int x, int y,int z) //区间修改
{if(tree[k].l >= x && tree[k].r <= y){tree[k].w += (tree[k].r - tree[k].l + 1) * z;tree[k].f += z;return;}if(tree[k].f) down(k);int m = (tree[k].l + tree[k].r) >> 1;if(x <= m) Interval_modification(k << 1, x, y, z);if(y > m) Interval_modification(k << 1 | 1, x, y, z);tree[k].w = tree[k << 1].w + tree[k << 1 | 1].w;
}
void Interval_Query(int k, int x, int y) //区间查询
{if(tree[k].l >= x && tree[k].r <= y){ans += tree[k].w;return ;}if(tree[k].f) down(k);int m = (tree[k].l + tree[k].r) / 2;if(x <= m) Interval_Query(k << 1, x, y);if(y > m) Interval_Query(k << 1 | 1, x, y);
}char s[10];
int main()
{int T, n;while(~scanf("%d",&T)){int cas = 0;while(T--){scanf("%d", &n);BuildSegmentTree(1,1,n);printf("Case %d:\n",++ cas);while(1){int x, y, z;getchar();scanf("%s",s);if(s[0] == 'E')break;else if(s[0]== 'A') // 区间修改{scanf("%d %d %d", &x, &y, &z);Interval_modification(1,x,y,z);}else if(s[0] =='B') // 区间查询{ans = 0;scanf("%d %d", &x, &y);Interval_Query(1, x, y);printf("%d\n",ans);}else if(s[0]=='C') // 单点修改{scanf("%d %d", &x, &y);Single_Point_Modification(1,x,y);}else if(s[0]=='D') // 单点查询{ans = 0;scanf("%d", &x);Single_Point_Query(1,x);printf("%d\n",ans);}}}}return 0;
}
转载于:https://www.cnblogs.com/lcchy/p/10139640.html
线段树(结构体建法_QAQ)相关推荐
- CF786B Legacy(线段树优化建边模板 + 最短路)
整理的算法模板合集: ACM模板 目录 线段树优化建边 题目传送门 由于本题的数据达到了1e5,所以如果直接全部暴力连边的话会达到O(n2)O(n^2)O(n2),时间包括内存都受不了.因此我们需要使 ...
- Luogu P1607 庙会班车【线段树】By cellur925
题目传送门 据说可以用贪心做?算了算了...我都不会贪.... 开始想的是用线段树,先建出一颗空树,然后输进区间操作后就维护最大值,显然开始我忽视了班车的容量以及可以有多组奶牛坐在一起的信息. 我们肯 ...
- 2017 ICPC西安区域赛 A - XOR (线段树并线性基)
链接:https://nanti.jisuanke.com/t/A1607 题面: Consider an array AA with n elements . Each of its element ...
- 【AHOI2009】【BZOJ1798】Seq 维护序列seq(线段树模板,易错提醒)
problem 给定一个长为n的序列,m次询问 每次询问有3种操作 1.一段区间全部乘一个值 2.一段区间全部加一个值 3.询问一段区间和%P solution 不就一颗线段树么,看朕10分钟A掉.. ...
- [支配树][lca][倍增][线段树][拓扑] Jzoj P4240 游行
Description 恶梦是学校里面的学生会主席.他今天非常的兴奋,因为学校一年一度的学生节开始啦!! 在这次节日上总共有N个节目,并且总共也有N个舞台供大家表演.其中第i个节目的表演时间为第i个单 ...
- C语言结构体和共同体
文章目录 结构体 用typedef说明一个新类型 结构体类型数据的定义和成员的引用 概述 结构体的定义和使用 结构体数组 结构体排序 结构体赋值 结构体嵌套结构体 共用体(联合体) 结构体 用type ...
- 线段树辅助——扫描线法计算矩形面积并
线段树辅助--扫描线法计算矩形面积并 本篇文章转自:传送门 分析: 1.矩形比较多,坐标也很大,所以横坐标需要离散化(纵坐标不需要),熟悉离散化后这个步骤不难,所以这里不详细讲解了,不明白的还请百度 ...
- Vijos1448题解---线段树+括号法
描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K=1,读入l. ...
- Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】
校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...
最新文章
- 【Mybatis 之应用篇】1_Mybatis简介、第一个Mybatis程序和增删改查在Mybatis中的使用方式
- SQL 每行随机产生数字
- PostgreSQL学习笔记3之表的继承和分区
- 【北斗】北斗卫星导航系统(BDS)介绍
- 简短—揭开数学学科对于计算机应用的神秘面纱
- java 秒杀 源码 下载_java高并发秒杀系统3-4节秒杀功能实现.mp4
- 一文搞懂Java泛型到底是什么东东
- 条件数、奇异值与海森矩阵
- VS Code插件安装位置
- windows11 任务栏 wifi、音量、电源还有通知无法左击弹出内容框
- Java8新特性 方法引用(三)
- shell脚本:备份数据库、代码上线
- css view a if属性,uni-app学习笔记(2)view属性控制css样式
- 亚马逊、速卖通、东南亚等跨境电商平台2022年最新测评自养号系统
- eclipse中文语言包安装(别看网上那些乱七八糟的,我这个最简单)
- 面试入职工作感悟:在阿里的那些风花雪月的日子
- d3dcompiler_47.dll缺失怎么修复?D3DCompiler_47.dll修复工具下载
- python画图小猪佩奇动画片全集_用Python画小猪佩奇
- 陕甘回变——关陕残月(一)
- java编写满天星程序_java满天星效果的实现方法
热门文章
- SAP Revenue Cloud业务综述
- SAP Cloud for Customer创建Account也会生成对应的Business partner实例
- SAP CRM configuration product在UI上的显示逻辑
- 宽高自适应_css样式写出三角形,宽高自适应的正方形,扇形!
- 双向dcdc变换器simulink仿真_台达_OBC双向充电_HighEfficiency HighDensity GaNBased 6.6kW
- 如何使用graphpad做柱形图_系列文章 如何使用PaddleDetection做一个完整项目(三)...
- 怎么把程序内部坐标转为屏幕坐标_全网最详细CNC加工中心程序代码大全!
- linux更改甜器名称,Linux添加swap分区
- 计算机网络电信号误差,用0V~5V方式传输远方温度信号的弊端
- 基于matlab实现的人脸检测