校门外的树
【题目分析】题目描述的是一种区间修改,看起来好像要用线段树。但是对于这种区间内部没有差别并且查询的是区间内的类别的问题,是可以转化为树状数组进行的。毕竟树状数组更加简单。
我们的关注点应该放在区间的端点处,然后通过统计端点得到答案。
我们不妨用数组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;
}

校门外的树——树状数组+区间修改相关推荐

  1. 树状数组区间修改和区间求和

    最一般树状数组能做到的操作是单点修改,区间求和,都是log(n)级别的.原理就是用树状数组维护a[i]的部分和. 想要做到修改区间,求单点值也很简单,用树状数组维护a[i]的差分数组d[i]的部分和既 ...

  2. 一维数状数组区间修改,查询

    模板题CODEVS-1082 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 第一行一个正整数n,接下来n行n个整数, 再接下来一个正整数Q,每行表示操 ...

  3. UESTC 1601 艾尔大停电2 二维树状数组+区间更新

    艾尔大停电2 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  S ...

  4. 树状数组 区间update/query

    Re [问题引入] 对于区间修改.区间查询这样的简单问题,打一大堆线段树确实是不划算,今天来介绍一下区间查询+区间修改的树状数组 [一些基础] 树状数组的基本知识不再介绍,请自行百度 我们假设sigm ...

  5. hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询

    点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...

  6. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  8. Color the ball(树状数组区间更新+单点求值)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 Color the ball Time Limit: 9000/3000 MS (Java/Ot ...

  9. 树状数组 区间加 区间求和_EXCEL统计区间个数的专属函数

    这次我们学习一个新的函数! 数字区间个数统计 如下图,要求统计四个成绩区间段的人数. 如果只统计一个区间内的人数,比如上图统计60-80分之间的人数,你会怎么办呢? 1.条件计数 =COUNTIF(B ...

最新文章

  1. 【 C 】预处理指令
  2. 大白话系列之C#委托与事件讲解大结局
  3. Hadoop集群扩展子节点
  4. html输入框数字无法读取,关于input无法获取小数点的问题!!!!-汗血宝马
  5. cad快速看图需要替换的4个vip文件_看不懂施工图怎么办?20年老师傅教你看图技巧,学会受用一生...
  6. java判断某个字符串是否是数字
  7. php 去掉url中的index.php,php 去掉url中的index.php
  8. linux上的定时器上的jiffies,Linux kernel -- 定时器/jiffies
  9. Docker生态技术链
  10. python下载官网-python下载官网
  11. 新鲜出炉 | 2019届互联网校招本科薪酬清单
  12. python流程图自动生成_python自动化办公 自动生成PPT通报
  13. uwsgi怎么启动停止
  14. java 处理txt_java 读写 txt 文件
  15. 如何成为一名推荐系统工程师
  16. PHP 照片合并视频
  17. 防火墙---翻译地址(NAT)
  18. mac 安装java8
  19. SAP CRM培训Uwinpro
  20. 医疗器械分销系统开发|分销商是怎么招募的?

热门文章

  1. python链表的实现,有注释
  2. POJ 2236 - Wireless Network ( 并查集 )
  3. NodeJS常用模块介绍
  4. 拓扑排序最长链-P3119 [USACO15JAN]草鉴定Grass Cownoisseur
  5. [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】
  6. mysql脚本解读_一篇很好的关于mysqld_safe脚本源码解读的文章,收藏了!!
  7. 监听网页微信扫码支付成功_网付扫码点餐新福利,消费者点餐可获微信支付金币奖励...
  8. java获取byte 长度_java获取字节的长度.
  9. linux编译ffmpeg成so,「ffmpeg」一 mac 环境下编译ffmpeg,生成so库文件
  10. java concurrent 例子_[Java Concurrent] 并发访问共享资源的简单案例