【9018:1956】线段树1
问题 D: 【模板】线段树1
时间限制: 1 Sec 内存限制: 512 MB
提交: 80 解决: 40
[提交][状态][讨论版]
题目描述
给定一个无序数列,有四种操作:
1.令数列中的某个数加上某个数
2.求一个区间的和
3.查询一段区间内的最大值;
4.查询一段区间内的最小值;
输入
输入的第1行,共有两个数n和q,表示数列长度和操作次数
输入的第2行,共有n个数,表示该数列
接下来共有q行,每行有三个数
第1个数为操作类型,具体如下
若是第1种操作,接下来两个数x,y分别表示将第x个数加y
若是第2~4种操作,接下来两个数x,y表示闭区间的左右端点
输出
输出共有若干行,对于每一个询问输出一个整数结果
样例输入
5 4 1 2 3 4 5 2 1 4 1 3 -2 3 1 5 4 2 3
样例输出
10 5 1
提示
1<=n,q<=200000
保证所有数据在c/c++语言的INT范围内,pascal语言的longint范围内。
1 #include<cstdio> 2 #include<iostream> 3 #define Max 200000 4 using namespace std; 5 int n,q; 6 struct node{ 7 int maxn,minn,sum,mark; 8 }tree[Max*3]; 9 void pushdown(int k,int l,int r){ 10 tree[2*k].mark+=tree[k].mark; 11 tree[2*k+1].mark+=tree[k].mark; 12 int len=r-l+1; 13 tree[2*k].sum+=tree[k].mark*(len-len/2); 14 tree[2*k+1].sum+=tree[k].mark*(len/2); 15 tree[k].mark=0; 16 } 17 void update(int l,int r,int a,int b,int k,int add){ 18 if(a<=l&&b>=r){ 19 tree[k].maxn+=add; tree[k].minn+=add; 20 tree[k].sum+=(r-l+1)*add; return; 21 } 22 if(l!=r&&tree[k].mark) pushdown(k,l,r); 23 int mid=(l+r)/2; 24 if(a<=mid) update(l,mid,a,b,2*k,add); 25 if(b>mid) update(mid+1,r,a,b,2*k+1,add); 26 tree[k].maxn=max(tree[2*k].maxn,tree[2*k+1].maxn); 27 tree[k].minn=min(tree[2*k].minn,tree[2*k+1].minn); 28 tree[k].sum=tree[2*k].sum+tree[2*k+1].sum; 29 } 30 int query(int l,int r,int a,int b,int k,int num){ 31 if(a==l&&b==r){ 32 if(num==3) return tree[k].maxn; 33 if(num==4) return tree[k].minn; 34 if(num==2) return tree[k].sum; 35 } 36 if(l!=r&&tree[k].mark) pushdown(k,l,r); 37 int mid=(l+r)/2; 38 if(b<=mid) return query(l,mid,a,b,2*k,num); 39 else if(a>mid) return query(mid+1,r,a,b,2*k+1,num); 40 else{ 41 if(num==3) return max(query(l,mid,a,mid,2*k,num),query(mid+1,r,mid+1,b,2*k+1,num)); 42 if(num==4) return min(query(l,mid,a,mid,2*k,num),query(mid+1,r,mid+1,b,2*k+1,num)); 43 if(num==2) return query(l,mid,a,mid,2*k,num)+query(mid+1,r,mid+1,b,2*k+1,num); 44 } 45 } 46 int main() 47 { 48 scanf("%d%d",&n,&q); 49 for(int i=1;i<=n;i++){ 50 int a; scanf("%d",&a); update(1,n,i,i,1,a); 51 } 52 for(int i=1;i<=q;i++){ 53 int num,x,y; scanf("%d%d%d",&num,&x,&y); 54 if(num==1) update(1,n,x,x,1,y); 55 if(num==2) printf("%d\n",query(1,n,x,y,1,2)); 56 if(num==3) printf("%d\n",query(1,n,x,y,1,3)); 57 if(num==4) printf("%d\n",query(1,n,x,y,1,4)); 58 } 59 return 0; 60 }
转载于:https://www.cnblogs.com/Beginner-/p/7467737.html
【9018:1956】线段树1相关推荐
- 【9018:2208】可持久化线段树2
2208: [模板]可持久化线段树2 时间限制: 3 Sec 内存限制: 256 MB 提交: 30 解决: 12 [提交][状态][讨论版] 题目描述 静态区间第K小问题是典型的主席树模板. 在这个 ...
- 二逼平衡树——树套树(线段树套Splay平衡树)
题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...
- 线段树——HDU - 1698
题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横
不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...
- [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树
Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...
- codefores 786B. Legacy(最短路,线段树优化拆点,好题)
题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...
- 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树
题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...
- 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)
题目链接 题意: 给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作: 1 u v:u到v路径(最短)上的边都取成相反的颜色 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一 ...
最新文章
- Lync 2013 与 Elastix 2.40 语音通信设置全过程(1)
- 阿里云移动研发平台EMAS,是如何连续5年安全护航双11的?
- 百度SEO资源吧emlog模版全套源码
- php 获取上周日期_php 获取上一周下一周的日期列表
- 如何把MySql数据库中的数据导入到MyCat集群中_---Linux运维工作笔记050
- Jquery页面跳转
- 左传 —— 春秋左氏传
- android wifi智能车,STM32智能WiFi视频小车全套资料(带安卓app与stm32源码等)
- 系统地介绍计算材料科学的发展现状、主要理论框架和设计实践方法,汪林望博士作序《计算材料学——设计与实践方法(第2版)》
- GB2312/GBK编码规则及单片机汉显字库算法
- win10 加快开机速度
- python爬取网站视频保存到本地
- Windows安装TortoiseSVN
- 看刘未鹏先生的博客的一些摘记
- openwrt路由器挂载sdcard为overlay
- React官方状态管理库—— Recoil
- mac vue 代理失效
- 中国科研人员开发出“蚁群”微型机器人
- Windows计算器切换模式
- YYModel 简介与使用
热门文章
- c语言绝对循环,c语言之循环
- php获取随机图片,PHP 随机显示某张图片
- python相关工作岗位_西安掌握Python有哪些工作岗位能够选择
- 4路组相连cache设计_浅谈 Cache
- 深度学习之生成对抗网络(6)GAN训练难题
- php java 单点登录_php实现多站点共用session实现单点登录的方法详解
- 互斥事件的概念和公式_IGCSE数学5月大考冲刺A*?必备公式与技巧
- [机器学习] XGBoost 自定义损失函数-FocalLoss
- B 树、B+ 树、B* 树
- 如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习)