校门外的树——树状数组+区间修改
校门外的树
【题目分析】题目描述的是一种区间修改,看起来好像要用线段树。但是对于这种区间内部没有差别并且查询的是区间内的类别的问题,是可以转化为树状数组进行的。毕竟树状数组更加简单。
我们的关注点应该放在区间的端点处,然后通过统计端点得到答案。
我们不妨用数组a1保存左端点的个数,用数组a2保存右端点的个数(从开始到x)假如查询的是区间[l,r],那么a1[r]是区间[1,r]的种类数,a2[l-1]是区间[1,r]中不包含在[l,r]的种类数,答案就是a1[r]-a1[l-1]
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int n,m,k,l,r;
const int MAXN=50005;
int a1[MAXN],a2[MAXN];int lowbit(int x)
{return x&(-x);
}void update1(int x,int y)
{while(x<=n){a1[x]+=y;x+=lowbit(x);}
}
void update2(int x,int y)
{while(x<=n){a2[x]+=y;x+=lowbit(x);}
}int ask1(int x)
{int ret=0;while(x){ret+=a1[x];x-=lowbit(x);}return ret;
}
int ask2(int x)
{int ret=0;while(x){ret+=a2[x];x-=lowbit(x);}return ret;
}int main()
{scanf("%d%d",&n,&m);memset(a1,0,sizeof(a1));memset(a2,0,sizeof(a2));for(int i=0;i<m;i++){scanf("%d%d%d",&k,&l,&r);if(k==1){update1(l,1);update2(r,1);}else if(k==2){printf("%d\n",ask1(r)-ask2(l-1));}}return 0;
}
校门外的树——树状数组+区间修改相关推荐
- 树状数组区间修改和区间求和
最一般树状数组能做到的操作是单点修改,区间求和,都是log(n)级别的.原理就是用树状数组维护a[i]的部分和. 想要做到修改区间,求单点值也很简单,用树状数组维护a[i]的差分数组d[i]的部分和既 ...
- 一维数状数组区间修改,查询
模板题CODEVS-1082 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 第一行一个正整数n,接下来n行n个整数, 再接下来一个正整数Q,每行表示操 ...
- UESTC 1601 艾尔大停电2 二维树状数组+区间更新
艾尔大停电2 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- 树状数组 区间update/query
Re [问题引入] 对于区间修改.区间查询这样的简单问题,打一大堆线段树确实是不划算,今天来介绍一下区间查询+区间修改的树状数组 [一些基础] 树状数组的基本知识不再介绍,请自行百度 我们假设sigm ...
- hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询
点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...
- hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
- Color the ball(树状数组区间更新+单点求值)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Color the ball Time Limit: 9000/3000 MS (Java/Ot ...
- 树状数组 区间加 区间求和_EXCEL统计区间个数的专属函数
这次我们学习一个新的函数! 数字区间个数统计 如下图,要求统计四个成绩区间段的人数. 如果只统计一个区间内的人数,比如上图统计60-80分之间的人数,你会怎么办呢? 1.条件计数 =COUNTIF(B ...
最新文章
- 【 C 】预处理指令
- 大白话系列之C#委托与事件讲解大结局
- Hadoop集群扩展子节点
- html输入框数字无法读取,关于input无法获取小数点的问题!!!!-汗血宝马
- cad快速看图需要替换的4个vip文件_看不懂施工图怎么办?20年老师傅教你看图技巧,学会受用一生...
- java判断某个字符串是否是数字
- php 去掉url中的index.php,php 去掉url中的index.php
- linux上的定时器上的jiffies,Linux kernel -- 定时器/jiffies
- Docker生态技术链
- python下载官网-python下载官网
- 新鲜出炉 | 2019届互联网校招本科薪酬清单
- python流程图自动生成_python自动化办公 自动生成PPT通报
- uwsgi怎么启动停止
- java 处理txt_java 读写 txt 文件
- 如何成为一名推荐系统工程师
- PHP 照片合并视频
- 防火墙---翻译地址(NAT)
- mac 安装java8
- SAP CRM培训Uwinpro
- 医疗器械分销系统开发|分销商是怎么招募的?
热门文章
- python链表的实现,有注释
- POJ 2236 - Wireless Network ( 并查集 )
- NodeJS常用模块介绍
- 拓扑排序最长链-P3119 [USACO15JAN]草鉴定Grass Cownoisseur
- [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】
- mysql脚本解读_一篇很好的关于mysqld_safe脚本源码解读的文章,收藏了!!
- 监听网页微信扫码支付成功_网付扫码点餐新福利,消费者点餐可获微信支付金币奖励...
- java获取byte 长度_java获取字节的长度.
- linux编译ffmpeg成so,「ffmpeg」一 mac 环境下编译ffmpeg,生成so库文件
- java concurrent 例子_[Java Concurrent] 并发访问共享资源的简单案例