【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++调用函数的dll

在工程项目中&#xff0c;为了不暴露源代码和避免严重耦合&#xff0c;所以将代码封装成 .dll二进制文件&#xff0c;以供项目调用。 这几天&#xff0c;也是在看这些封装dll&#xff0c;并使用Java中的JNA调用c的dll链接库中的函数&#xff0c;做个笔记&#xff01; 1、创建…

SoJpt Boot 2.2-3.8 发布,Spring Boot 使用 Jfinal 特性极速开发

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 在Spring Boot框架下使用Jfinal特性极速开发,可以在Spring Boot中向使用Jfinal一样使用Enjoy、Aop、Controller等一系列方法(如: getFile(), renderFile....),以及ActiveRecord SoJpt Boot&…

组合数学--约瑟夫环问题 Josephus

约瑟夫斯问题&#xff08;有时也称为约瑟夫斯置换&#xff09;&#xff0c;是一个出现在计算机科学和数学中的问题。在计算机编程的算法中&#xff0c;类似问题又称为约瑟夫环。 有n个囚犯站成一个圆圈&#xff0c;准备处决。首先从一个人开始&#xff0c;越过k-2个人&#xff…

3轴机器人各关节运动学建立,python编程,非常容易理解

分类&#xff1a;机器人学 一、问题描述 如右图所示的三自由度机械臂&#xff0c;关节1和关节2相互垂直&#xff0c;关节2和关节3相互平行。如图所示&#xff0c;所有关节均处于初始状态。 要求: (1) 定义并标注出各关节的正方向&#xff1b; (2) 定义机器人基坐标系&#x…

ASP.Net中页面传值的几种方式

大致概括一下&#xff0c;ASP.NET 页面之间传递值得方式大致可以分为如下几种&#xff1a;Request.QueryString["name"],Request.Form("name"),Session,Cookie,Cache,Application,Server.Transfer,Database,HttpContext的Item属性&#xff0c;Files,DataBa…

Win 10 源码一览:0.5T 代码、400 万文件、50 万文件夹

Windows 操作系统本身是不开源的&#xff0c;但是近日微软内核工程师 Axel Rietschin 发表了一篇博客&#xff0c;带大家一窥了 Windows 10 内核的魅力。 Axel 介绍&#xff0c;Windows 10 与 Windows 8.x、7、Vista、XP、2000 和 NT 的代码库是相同的&#xff0c;其中每一代都…

老齐python-基础3(列表)

1、定义一个列表 >>> a [] #创建一个空列表 >>> type(a) #查看数据类型 <class list> >>> bool(a) #判断非空 False >>> print(a) [] >>> a [2,3,tajzhang,] >>> a [2, 3, tajzhang] >&…

UWP 响应键盘组合快捷键

方法1&#xff1a;响应Ctrl&#xff1f;快捷键 首先在load事件或者keydown事件内注册事件 public MainPage(){this.InitializeComponent();// Register for accelerator key events used for button hotkeysWindow.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated Dis…

NDK 开发实战 - 封装 java 层 sdk 模型

关于 Ndk 开发&#xff0c;网上的资料比较少&#xff0c;这方面的书籍也不多。因为其涉及的知识非常广&#xff0c;时常有哥们问我&#xff0c;东西那么多到底要学到什么程度呢&#xff1f;到底应该怎么学&#xff1f;这期我给大家来做一个简单回答&#xff0c;首先单纯站在 An…

JDK+Tomcat搭建JSP运行环境--JSP基础

一、搭建JSP运行环境之前需要了解的基本知识 配置JSP运行环境之前&#xff0c;我们需要了解JSP的运行机制。只有了解JSP运行机制后&#xff0c;我们才能知道为什么要搭建JSP运行环境?如何去搭建JSP运行环境?为什么要配置Tomcat、JDK&#xff1f; JSP(Java Sever Page)即Java服…

Docker容器的自动化监控实现

本文由 网易云 发布。 近年来容器技术不断成熟并得到应用。Docker作为容器技术的一个代表&#xff0c;目前也在快速发展中&#xff0c;基于 Docker的各种应用也正在普及&#xff0c;与此同时 Docker对传统的运维体系也带来了冲击。我们在建设运维平台的过程中&#xff0c;也需…

robotframework 常用关键字

标准库 第三方库 其他库转载于:https://www.cnblogs.com/Chamberlain/p/10729054.html

身份证的验证

var Wi [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 var ValideCode [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]; // 身份证验证位值.10代表X function checkIdcard(idCard) { idCard trim(idCard);//去掉字符串头尾空格 if (idCard.length 15…

人工智能实战小程序之语音_前端开发

1. 人工智能实战小程序之准备工作 2. 人工智能实战小程序之语音_前端开发 今天这部分主要讲小程序前端功能的开发由于我偏后端&#xff0c;css是我的弱项&#xff0c;可能很多人和我一样开发小程序不知道如何下手&#xff0c;希望本篇文章对你有帮助我的学习路线是&#xff1a;…

当TFS/VSTS遇上Power BI

引言众所周知&#xff0c;要对TFS进行深入的图表分析&#xff0c;往往需要依赖于SQL Server Analysis Service和SQL Server Reporting Service。虽然随着TFS对敏捷项目的支持&#xff0c;内置了诸如累积流图、燃尽图等快捷图表&#xff1b;并且在最新的版本中还可以在仪表盘和查…

HashMap深度解析:一文让你彻底了解HashMap

写在前面HashMap是Map族中最为常用的一种&#xff0c;也是 Java Collection Framework 的重要成员。本文首先给出了 HashMap 的实质并概述了其与 Map、HashSet 的关系&#xff0c;紧接着给出了 HashMap 在 JDK 中的定义&#xff0c;并结合源码分析了其四种构造方式。最后&#…

Bzoj3628: [JLOI2014]天天酷跑

3628: [JLOI2014]天天酷跑 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 121 Solved: 44[Submit][Status][Discuss]Description 在游戏天天酷跑中&#xff0c;最爽的应该是超级奖励模式了吧&#xff0c;没有一切障碍&#xff0c;可以尽情的吃金币&#xff0c;现在请你控制…

python_线程、进程和协程

线程 Threading用于提供线程相关的操作&#xff0c;线程是应用程序中工作的最小单元。 1 #!/usr/bin/env python2 #codingutf-83 __author__ yinjia4 5 6 import threading,time7 8 def show(arg):9 time.sleep(2) 10 print(线程: str(arg)) 11 12 for i in range(…

AppDelegate瘦身之服务化

有没有觉得你的AppDelegate杂乱无章&#xff1f;代码几百行上千行&#xff1f;集成了无数的功能&#xff0c;如推送、埋点、日志统计、Crash统计等等&#xff0c;感觉AppDelegate无所不能。 来一段一般的AppDelegate代码&#xff0c;来自网上一篇文章&#xff1a; UIApplicatio…

第四章:手机平板要兼顾-探究碎片

碎片是什么&#xff1f; 碎片&#xff08;Fragment&#xff09;是一种可以嵌入在活动&#xff08;Activity&#xff09;中的 UI 片段&#xff0c;它能让程序更加合理和充分的利用大屏幕的空间&#xff0c;因而在平板上应用的非常广泛。 碎片的使用方式 静态嵌入动态加载碎片和活…