洛谷P3374(线段树)(询问区间和,支持单点修改)
- //询问区间和,支持单点修改
- #include <cstdio>
- using namespace std;
- const int maxn=;
- struct treetype
- {
- int l,r,sum;
- };
- treetype a[*maxn];
- int num[maxn];
- void build(int k,int l,int r)
- {
- a[k].l=l;a[k].r=r;
- if (l==r)
- {
- a[k].sum=num[l];
- return;
- }
- int mid=(l+r)>>,i=k<<;
- build(i,l,mid);
- build(i+,mid+,r);
- a[k].sum=a[i].sum+a[i+].sum;
- }
- void change(int k,int x,int t)
- {
- if (a[k].l==a[k].r)
- {
- a[k].sum+=t;
- return;
- }
- int mid=(a[k].l+a[k].r)>>,i=k<<;
- if (x<=mid) change(i,x,t);
- else change(i+,x,t);
- a[k].sum=a[i].sum+a[i+].sum;
- }
- int query(int k,int x,int y)
- {
- if (x<=a[k].l && a[k].r<=y) return a[k].sum;
- int mid=(a[k].l+a[k].r)>>,ans=,i=k<<;
- if (x<=mid) ans=query(i,x,y);
- if (mid<y) ans+=query(i+,x,y);
- return ans;
- }
- int main()
- {
- int n,m;
- scanf("%d%d",&n,&m);
- for (int i=;i<=n;i++) scanf("%d",&num[i]);
- build(,,n);
- //for (int i=1;i<=n*2;i++) printf("%d %d %d %d\n",i,a[i].l,a[i].r,a[i].sum);
- for (int i=;i<=m;i++)
- {
- int t,x,y;
- scanf("%d%d%d",&t,&x,&y);
- if (t==) change(,x,y);
- else printf("%d\n",query(,x,y));
- }
- return ;
- }
洛谷P3374(线段树)(询问区间和,支持单点修改)的更多相关文章
- NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/9265380.html 题目传送门 - 洛谷P3960 题目传送门 - LOJ#2319 题目传送门 - Vij ...
- 洛谷P3372线段树1
难以平复鸡冻的心情,虽然可能在大佬眼里这是水题,但对蒟蒻的我来说这是个巨大的突破(谢谢我最亲爱的lp陪我写完,给我力量).网上关于线段树的题解都很玄学,包括李煜东的<算法竞赛进阶指南>中的 ...
- 洛谷 P3372 线段树1
这是一道模板题 线段树介绍https://www.cnblogs.com/nvwang123/p/10420832.html #include<bits/stdc++.h> using n ...
- 洛谷P3373线段树模板2
题目:https://www.luogu.org/problemnew/show/P3373 带乘的线段树,更新时把加的标记也乘一下,然后取值时先乘后加. 代码如下: #include<iost ...
- 洛谷P3372线段树模板1——线段树
题目:https://www.luogu.org/problemnew/show/P3372 线段树模板. 代码如下: #include<iostream> #include<cst ...
- [ZOJ1610]Count the Colors(线段树,区间染色,单点查询)
题目链接:http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=1610 题意:给一个长8000的绳子,向上染色.一共有n段被染色,问染 ...
- HDU 2795 Billboard 线段树,区间最大值,单点更新
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu3074 线段树求区间乘积(单点更新)
题意: 给你n个数,两种操作,(1) 把第b个数改成c (2)算出b-c的乘积,结果对1000000007取余. 思路: 线段树单点更新,简单题目,不多解释,具体看代码. #i ...
- 洛谷3372线段树模板题 对区间+k或者查询区间和
#include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; ty ...
- 洛谷P3373 线段树2(补上注释了)
毒瘤题.找了一下午+晚上的BUG,才发现原来query_tree写的是a%p; 真的是一个教训 UPD:2019.6.18 #include<iostream> #include<c ...
随机推荐
- Linux实用技巧--隧道
平时开发过程中,可能会遇到一些网络问题,比如npm install 一些依赖包.本地电脑是可以,没有问题.但是测试环境服务器,由于公司内部网络安全限制,不可以随意访问外部网络.因此下载一个依赖包就变得 ...
- Dapper - a simple object mapper for .Net
Dapper - a simple object mapper for .Net Release Notes Located at stackexchange.github.io/Dapper Pac ...
- Sabotage 【UVA - 10480】【最大流割边】
题目链接 很容易会想到是最大流建边,但是同样的这里有坑点,就是有的人去输出边的时候,去把残余网络的流为0的边给输出了,其实不然,我们应当输出的是那些最后跑到深度为0的不能再走下去的点,只要把他们割了, ...
- JavaScript.InjectedScriptHost
"use strict"; (function(InjectedScriptHost, inspectedGlobalObject, injectedScriptId) { ...
- Netty之揭开BootStrap 的神秘面纱
客户端BootStrap: Bootstrap 是Netty 提供的一个便利的工厂类, 我们可以通过它来完成Netty 的客户端或服务器端的Netty 初始化.下面我先来看一个例子, 从客户端和服务器 ...
- Java中的多线程基础
1.线程与进程 进程: 进程是程序运行以及资源分配的基本单位,一个程序至少有一个进程. 如下图所示: 线程: 线程是CPU调度和分配的基本单位,一个进程至少有一个线程. 同一个进程中的线程共享进程资源 ...
- 3、NumPy 数组属性
1.秩.维度 NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions ...
- js/jquery中什么时候用return,什么时候用return false
根本的说 return 是函数的返回结果用, 如果你一个函数需要执行结果那就return 你需要的结果, 不需要结果就不用return而在jq中有些特殊的用法,比如$().each(function( ...
- 安卓构架组件——概述 Android Architecture Components
谷歌官文文档地址:https://developer.android.google.cn/topic/libraries/architecture 安卓构架组建是库的集合:帮助你设计健壮的.易测试的. ...
- 2018-8-10-win10-UWP-序列化
title author date CreateTime categories win10 UWP 序列化 lindexi 2018-08-10 19:16:50 +0800 2018-2-13 17 ...