原题链接

思路:

本质是求区间数量大于1的数的个数,考虑一个 next 数组记录相同数最近的下一个位置(经典套路)查询区间离线后 l 从小到大排序,要删掉 l 上的数 如果下一个数存在就要减去下一个数的贡献,如果下下一个数存在就要加上下下一个数的贡献,实现用树状数组,具体看代码

一些注意点:

数组位置建议从1开始,如果从0开始,树状数组遇到0要特判

这个问题是不满足区间相减相加的,很多文章在查询答案时把

ans=query(q[i].r);

写成了

ans=query(q[i].r)-query(q[i].l-1);

答案不会出错但说明还是不理解, 在每次查询时 l 指针已经和区间左端点对齐了,query(q[i].l-1)的答案恒是0

莫队的思想,只是用树状数组实现罢了

参考代码:

int n,c,m;
int a[N],_next[N],_last[N],sum[N],ans[N];  // next 记录下一个相同颜色的位置 last 是上一个
struct PW{   //查询排序int l,r,id;
}q[N];
bool cmp(PW s1,PW s2){return s1.l<s2.l;
}
int lowbit(int x){return x&(-x);
}
void add(int x,int num){if(x==0) return ;for( ;x<=n;sum[x]+=num,x+=lowbit(x));
}
int query(int x){int re=0;for( ;x>0;re+=sum[x],x-=lowbit(x));return re;
}
int main(){cin>>n>>c>>m;  // n个数 c种 m个查询for(int i=1;i<=n;i++){cin>>a[i];}for(int i=n;i>=1;i--){  // 记录相同数的最近的下一个位置_next[i]=_last[a[i]];  _last[a[i]]=i;}for(int i=1;i<=c;i++){  // 出现数量大于1在第二次出现的地方加贡献if(_last[i]&&_next[_last[i]]) add(_next[_last[i]],1);}for(int i=1;i<=m;i++){cin>>q[i].l>>q[i].r;q[i].id=i;}sort(q+1,q+1+m,cmp);int l=1;for(int i=1;i<=m;i++){while(l<q[i].l){if(_next[l]) add(_next[l],-1);  // l删去下一个位置的贡献减去if(_next[l]&&_next[_next[l]]) add(_next[_next[l]],1); //下下个位置存在加贡献l++;}ans[q[i].id]=query(q[i].r);}for(int i=1;i<=m;i++){cout<<ans[i]<<endl;}return 0;
}

[HEOI2012]采花 (离线树状数组)相关推荐

  1. P4113 [HEOI2012]采花 【树状数组 AC】【莫队/主席树 TLE】

    传送门 题意简述:给定一个长度为 n 的序列,有 m 次询问,每次询问一段区间,求区间中有多少个数出现次数超过 1 次 这道题真的有点恶心...在洛谷上属于莫队,但是莫队会T,数据居然有2e6.莫队的 ...

  2. BZOJ-2743 [HEOI2012]采花 【树状数组+离线处理】

    Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一 ...

  3. NKOJ 2182 (HEOI 2012) 采花(树状数组/线段树)

    P2182[河北OI 2012 DAY1]采花 问题描述 萧芸斓是Z 国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳 了n 朵花,花有c ...

  4. [HEOI2012]采花(思维 + 离线 + 树状数组)

    题目链接 分析 我只能说太妙了- 离线 + 树状数组 参考题解: 这个题要和<HH的项链>做对比: 关键就是为什么要离线处理,以及 怎么对区间进行排序和维护: [SDOI2009]HH的项 ...

  5. hdu 4605 Magic Ball Game (在线主席树/离线树状数组)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4605 题意: 有一颗树,根节点为1,每一个节点要么有两个子节点,要么没有,每个节点都有一个权值wi .然后,有一个球,附带值x . 球 ...

  6. HDU3333 Turing Tree 离线树状数组

    题意:统计一段区间内不同的数的和 分析:排序查询区间,离线树状数组 #include <cstdio> #include <cmath> #include <cstrin ...

  7. 牛客小白9 换个角度思考(离线+树状数组)

    title: 牛客小白9 换个角度思考(离线+树状数组) date: 2018-11-29 15:25:18 tags: [离线,树状数组] categories: ACM 题目链接 题目描述 给定一 ...

  8. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结

    文章目录 树状数组 lowbit 线段树与树状数组 单点修改 区间查询 区间修改 区间求和 二维树状数组 离线树状数组 例题 POJ:stars MooFest [SDOI2009]HH的项链 Tur ...

  9. 【BZOJ3653】谈笑风生 离线+树状数组+DFS序

    [BZOJ3653]谈笑风生 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称"a比b不知道高明到哪里去了&quo ...

最新文章

  1. Jmeter JDBC执行多条SQL
  2. 作为Java程序员应该掌握的10项技能
  3. PHP7 下安装 memcache 和 memcached 扩展
  4. html 表格 单击,在HTML表格中单击“空”单元格
  5. Swift项目中不能定义OC类继承Swift类
  6. mysql语言翻译_SQL语句翻译成MYSQL查询
  7. 大侠学java之继承
  8. PHP获取windows登录用户名的方法
  9. GStreamer应用开发文档的ogg播放器
  10. win10提高开机速度的设置教程 电脑五秒开机优化步骤
  11. conda install Python库时报PackagesNotFoundError:的错误的解决方案
  12. 机房交换机网络测试软件,国内IDC机房带宽测试工具和方案
  13. 为何现在欠钱的人,都不爱还钱,太气人了...
  14. PACS医学影像DICOM dcmdictpath知识记录梳理
  15. 数据分析统计学原理第十二章:多个比例的比较、独立性及拟合优度检验 | 我的统计学原理复习日记
  16. 大数据学习路线-入门精简
  17. Android存入mysql数据库中文乱码解决方法的超级坑
  18. php研究所 百科_松下幸之助_PHP研究所
  19. bapi sap 创建物料_SAP调用BAPI创建物料主数据
  20. 宏转录组方法_综述:分析微生物组的最佳做法

热门文章

  1. RGB、YUY2、YUYV、YVYU、UYVY、AYUV格式详解
  2. 北京大兴国际机北京大兴国际机场,炫酷之处,一图了解!
  3. java am pm_java-在日期格式化后以小写形式显示AM和PM
  4. 2022最新 Python和Pycharm官网下载安装
  5. 数据结构与算法分析——第1~2章考试题
  6. 记录谷粒商城P90 商品发布关于[500] during [POST](null空指针)的坑
  7. 人脸属性识别数据库和开源项目
  8. Keepalived_vrrp[15699]: (VI_1): ip address associated with VRID 51 not present in MASTER advert : ..
  9. 软件项目外包的优缺点
  10. 北京文香录播服务器型号,一款文香课程录播系统三种不同用法