[HEOI2012]采花 (离线树状数组)
原题链接
思路:
本质是求区间数量大于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]采花 (离线树状数组)相关推荐
- P4113 [HEOI2012]采花 【树状数组 AC】【莫队/主席树 TLE】
传送门 题意简述:给定一个长度为 n 的序列,有 m 次询问,每次询问一段区间,求区间中有多少个数出现次数超过 1 次 这道题真的有点恶心...在洛谷上属于莫队,但是莫队会T,数据居然有2e6.莫队的 ...
- BZOJ-2743 [HEOI2012]采花 【树状数组+离线处理】
Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一 ...
- NKOJ 2182 (HEOI 2012) 采花(树状数组/线段树)
P2182[河北OI 2012 DAY1]采花 问题描述 萧芸斓是Z 国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳 了n 朵花,花有c ...
- [HEOI2012]采花(思维 + 离线 + 树状数组)
题目链接 分析 我只能说太妙了- 离线 + 树状数组 参考题解: 这个题要和<HH的项链>做对比: 关键就是为什么要离线处理,以及 怎么对区间进行排序和维护: [SDOI2009]HH的项 ...
- hdu 4605 Magic Ball Game (在线主席树/离线树状数组)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4605 题意: 有一颗树,根节点为1,每一个节点要么有两个子节点,要么没有,每个节点都有一个权值wi .然后,有一个球,附带值x . 球 ...
- HDU3333 Turing Tree 离线树状数组
题意:统计一段区间内不同的数的和 分析:排序查询区间,离线树状数组 #include <cstdio> #include <cmath> #include <cstrin ...
- 牛客小白9 换个角度思考(离线+树状数组)
title: 牛客小白9 换个角度思考(离线+树状数组) date: 2018-11-29 15:25:18 tags: [离线,树状数组] categories: ACM 题目链接 题目描述 给定一 ...
- 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结
文章目录 树状数组 lowbit 线段树与树状数组 单点修改 区间查询 区间修改 区间求和 二维树状数组 离线树状数组 例题 POJ:stars MooFest [SDOI2009]HH的项链 Tur ...
- 【BZOJ3653】谈笑风生 离线+树状数组+DFS序
[BZOJ3653]谈笑风生 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称"a比b不知道高明到哪里去了&quo ...
最新文章
- Jmeter JDBC执行多条SQL
- 作为Java程序员应该掌握的10项技能
- PHP7 下安装 memcache 和 memcached 扩展
- html 表格 单击,在HTML表格中单击“空”单元格
- Swift项目中不能定义OC类继承Swift类
- mysql语言翻译_SQL语句翻译成MYSQL查询
- 大侠学java之继承
- PHP获取windows登录用户名的方法
- GStreamer应用开发文档的ogg播放器
- win10提高开机速度的设置教程 电脑五秒开机优化步骤
- conda install Python库时报PackagesNotFoundError:的错误的解决方案
- 机房交换机网络测试软件,国内IDC机房带宽测试工具和方案
- 为何现在欠钱的人,都不爱还钱,太气人了...
- PACS医学影像DICOM dcmdictpath知识记录梳理
- 数据分析统计学原理第十二章:多个比例的比较、独立性及拟合优度检验 | 我的统计学原理复习日记
- 大数据学习路线-入门精简
- Android存入mysql数据库中文乱码解决方法的超级坑
- php研究所 百科_松下幸之助_PHP研究所
- bapi sap 创建物料_SAP调用BAPI创建物料主数据
- 宏转录组方法_综述:分析微生物组的最佳做法
热门文章
- RGB、YUY2、YUYV、YVYU、UYVY、AYUV格式详解
- 北京大兴国际机北京大兴国际机场,炫酷之处,一图了解!
- java am pm_java-在日期格式化后以小写形式显示AM和PM
- 2022最新 Python和Pycharm官网下载安装
- 数据结构与算法分析——第1~2章考试题
- 记录谷粒商城P90 商品发布关于[500] during [POST](null空指针)的坑
- 人脸属性识别数据库和开源项目
- Keepalived_vrrp[15699]: (VI_1): ip address associated with VRID 51 not present in MASTER advert : ..
- 软件项目外包的优缺点
- 北京文香录播服务器型号,一款文香课程录播系统三种不同用法