博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1166 线段树模板&树状数组模板
阅读量:7136 次
发布时间:2019-06-28

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

HDU1166 上好的线段树模板&&树状数组模板

自己写的第一棵线段树&第一棵树状数组 莫名的兴奋
线段树:

#include 
using namespace std;int cases,n,tree[200500],ql,qr;char s[50];void build(int l,int r,int num){ if(l==r){scanf("%d",&tree[num]);return;} int mid=(l+r)/2; build(l,mid,num*2); build(mid+1,r,num*2+1); tree[num]=tree[2*num]+tree[2*num+1];}int qu(int l,int r,int num){ if(ql<=l&&qr>=r)return tree[num]; int mid=(l+r)/2,sum=0; if(mid>=ql)sum+=qu(l,mid,num*2); if(mid
=ql)add(l,mid,num*2); if(mid

树状数组:

#include 
#include
#include
#include
using namespace std;int cases,n,a[50005],c[50005];char s[50];int lowbit(int x){
return x&(-x);}void add(int x,int v){ while(x<=n) { c[x]+=v; x+=lowbit(x); }}int find(int x){ int ans=0; while(x>0) { ans+=c[x]; x-=lowbit(x); } return ans;}int main(){ scanf("%d",&cases); for(int ii=1;ii<=cases;ii++) { printf("Case %d:\n",ii); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); add(i,a[i]); } while(scanf("%s",s)&&s[0]!='E') { register int xx,yy; scanf("%d%d",&xx,&yy); if(s[0]=='Q') printf("%d\n",find(yy)-find(xx-1)); else if(s[0]=='A') add(xx,yy); else if(s[0]=='S') add(xx,-yy); } memset(c,0,sizeof(c)); memset(a,0,sizeof(a)); }}

这里写图片描述

转载于:https://www.cnblogs.com/SiriusRen/p/6532474.html

你可能感兴趣的文章
POJ 2456: Aggressive cows(二分,贪心)
查看>>
Opencv+C++之身份证识别(一)
查看>>
在使用gdb调试过程中,经常需要查看变量的值
查看>>
python源码解剖
查看>>
关于ava容器、队列,知识点总结
查看>>
Eclipse -Xms256M -Xmx640M -XX:PermSize=256m -XX:MaxPermSize=768m
查看>>
框架重构:规范集成测试的结构和命名规则
查看>>
「转」xtrabackup新版详细说明
查看>>
Spring Boot 构建电商基础秒杀项目 (十) 交易下单
查看>>
HTTP协议入门知识
查看>>
SQL中创建用户的方法
查看>>
PHP168 6.0及以下版本login.php代码执行
查看>>
Java代理(jdk静态代理、动态代理和cglib动态代理)
查看>>
WPF生命周期
查看>>
各大Oj平台介绍
查看>>
hdu1059 dp(多重背包二进制优化)
查看>>
四象限分析法分析你是否适合做管理
查看>>
Create a database in mysql for mac
查看>>
史上最全、JavaScript基础篇
查看>>
Selenium Web 自动化 - Selenium常用API
查看>>