博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ssl2648-线段树练习5【线段树】
阅读量:4884 次
发布时间:2019-06-11

本文共 1127 字,大约阅读时间需要 3 分钟。

正题


题意

经典线段树题,不过是单点修改。


解题思路

直接线段树


代码

#include
using namespace std;struct treenode{ int l,r,cover;}tree[400000];int n,m,x,y;char c;void build(int k,int a,int b)//线段树{ tree[k].l=a;tree[k].r=b; if (a==b) return; int wz=(a+b)/2; build(k*2,a,wz); build(k*2+1,wz+1,b);}int find(int k,int a,int b)//查找{ if (tree[k].r==b && tree[k].l==a) return tree[k].cover;//返回值 if (b<=tree[k*2].r) return find(k*2,a,b); else if (a>=tree[k*2+1].l) return find(k*2+1,a,b); else return find(k*2,a,tree[k*2].r)+find(k*2+1,tree[k*2+1].l,b);}void updata(int k,int a,int num)//修改{ if (tree[k].r==a && tree[k].l==a) { tree[k].cover+=num;//修改 return; } if (a<=tree[k*2].r) updata(k*2,a,num); else updata(k*2+1,a,num); tree[k].cover=tree[k*2].cover+tree[k*2+1].cover;//更新}int main(){ scanf("%d%d",&n,&m); build(1,1,n); for (int i=1;i<=m;i++) { scanf("\n%c%d%d",&c,&x,&y); if (c=='M') { updata(1,x,y); } else { printf("%d\n",find(1,x,y)); } }}

转载于:https://www.cnblogs.com/sslwyc/p/9028698.html

你可能感兴趣的文章
Java的时间空间复杂度详解
查看>>
有效防止SQL注入漏洞
查看>>
Linux chown命令
查看>>
十、I/O流——4-输入、输出流体系
查看>>
十二、网络编程——4-基于UDP协议的网络编程
查看>>
异常处理与调试6 - 零基础入门学习Delphi55(完)
查看>>
if语句三种形式
查看>>
正则表达式之字符串验证
查看>>
codeblocks如何支持_tmain?可移植代码的编码推荐
查看>>
省市联动 填坑
查看>>
canvas写的一个小时钟demo
查看>>
原来今天是冬至
查看>>
又混了一天班
查看>>
九度oj 1006
查看>>
HDU6400-2018ACM暑假多校联合训练1004-Parentheses Matrix-构造
查看>>
最短路问题专题
查看>>
《Redis复制与可扩展集群搭建》看后感
查看>>
Jquery Mobile总结
查看>>
223. Rectangle Area
查看>>
spring boot + velocity中文乱码解决方式
查看>>