[HEOI 2012] 采花
[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=2743
[算法]
首先预处理nxt[]数组 , 其中 , nxt[i]表示下一个和i号位颜色相同的位置 , 然后离线 , 将询问按左端点排序 , 每次将nxt[i]减一 , nxt[nxt[i]]加一
用树状数组维护即可 , 详见代码
时间复杂度 : O(MlogN)
[代码]
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 10;struct Que {int l , r , id; } q[MAXN];int n , c , m; int a[MAXN] , ans[MAXN] , pre[MAXN] , nxt[MAXN]; bool visited[MAXN]; struct Binary_Indexed_Tree {int c[MAXN];inline int lowbit(int x){return x & (-x);}inline void add(int pos,int value){if (!pos) return;for (int i = pos; i <= n; i += lowbit(i)) c[i] += value;}inline int query(int pos){int ret = 0;if (!pos) return 0;for (int i = pos; i; i -= lowbit(i))ret += c[i];return ret;}inline int query(int l,int r){return query(r) - query(l - 1);} } bit;template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); } template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); } template <typename T> inline void read(T &x) {T f = 1; x = 0;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';x *= f; } inline bool cmp(Que a,Que b) {return a.l < b.l; }int main() {read(n); read(c); read(m);for (int i = 1; i <= n; i++) read(a[i]);for (int i = n; i >= 1; i--){if (!visited[a[i]]) {visited[a[i]] = true;pre[a[i]] = i;continue; } else{nxt[i] = pre[a[i]];pre[a[i]] = i;}}memset(visited,false,sizeof(visited));for (int i = 1; i <= n; i++){if (!visited[a[i]]){bit.add(nxt[i],1);visited[a[i]] = true; }}for (int i = 1; i <= m; i++){read(q[i].l); read(q[i].r);q[i].id = i; }sort(q + 1,q + m + 1,cmp);int cur = 0;for (int i = 1; i <= m; i++){while (cur < q[i].l){bit.add(nxt[cur],-1);bit.add(nxt[nxt[cur]],1);++cur;}ans[q[i].id] = bit.query(q[i].r) - bit.query(q[i].l - 1);}for (int i = 1; i <= m; i++) printf("%d\n",ans[i]);return 0;}
转载于:https://www.cnblogs.com/evenbao/p/9784527.html
[HEOI 2012] 采花相关推荐
- NKOJ 2182 (HEOI 2012) 采花(树状数组/线段树)
P2182[河北OI 2012 DAY1]采花 问题描述 萧芸斓是Z 国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳 了n 朵花,花有c ...
- 【河北OI 2012 DAY1】采花 线段树
[河北OI 2012 DAY1]NKOJ2182 采花 问题描述 萧芸斓是Z 国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳 了n 朵花 ...
- BZOJ2743 [HEOI2012]采花 【离线 + 树状数组】
题目 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采 ...
- P4113 [HEOI2012]采花
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- 洛谷 P2056 采花
题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 1-c 表示) ,且花是排成 ...
- 1619. [HEOI2012]采花
1619. [HEOI2012]采花 ★★☆ 输入文件:1flower.in 输出文件:1flower.out 简单对比 时间限制:5 s 内存限制:128 MB [题目描述] 萧薰儿 ...
- P4113 [HEOI2012]采花 ( 树状数组 + 离线 )
题目链接:点击进入 题目 思路 跟此题相似:HH的项链 对于若干个询问的区间 [ l , r ] ,如果他们的 r 都相等的话,那么对于数组中出现的同一个数字,因为要求只有每个数出现至少两次才可以计入 ...
- 从柏拉图采花问题说起
在台大的概率课上做了一道有意思的概率题: 既然柏拉图这么聪明,不知道他这样做是不是已经知道自己能够以较大的概率摘得最美的玫瑰花了.当然,想归想,算出来才有说服力.这道题思考了一下,有下面几种思路: 思 ...
- luogu P2056 采花
题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 1-c 表示) ,且花是排成 ...
最新文章
- 关于C++中数组下标越界不报错的问题
- 西南这座城,脸,比北上广还有用
- tf.Variable 和 tf.get_variable的区别(2)
- 2017年8个最流行的Web编程趋势
- 《springcloud超级入门》微服务的概念和优缺点《一》
- 美国高校开源迄今为止最大新冠肺炎CT数据集
- 【转】HTML5杂谈 概念与现行游戏 割绳子 宝石迷阵
- linux下 udf提权_raven靶机实战(linux-udf提权)-vuluhub系列(四)
- 实验固体力学类毕业论文文献包含哪些?
- 机器学习——概率模型
- 使用QGIS实现城市空气质量指数(AQI)数据可视化
- android 直播推流sdk,Android——直播推流SDK
- if 嵌套if 多重if结构
- linux shell中环境变量$PS1详解
- Java毕业设计_代驾到家服务app的设计与实现
- 这4个兼职平台实测靠谱,想做兼职的赶紧收藏起来看看吧
- swing(二十一)
- Android开发 设置手机壁纸
- git中的revert和reset
- jquery uploadify 用法详解
热门文章
- 为什么是ELT而非ETL
- “折翼行动” :全球第三大比特币矿机厂商遭遇供应链攻击
- 书法创作手札(一)《鬼谷子-揣篇第七》创作经验帖
- ubuntu16.04显示有线连接,但是无法上网
- Win10删除文件权限不足的一种可能的解决方式
- oracle 查询上一月,Oracle数据库查询上一小时、上一天、上一个月、上一年
- 3dmax和python做3d动画_ThingJS问答录 | 三维动画师和程序员的职业前景 3D 可视化
- 信息安全之操作系统安全防护技术
- 选择数字IC行业,就一定要读研吗?
- Android 4.0按键事件以及系统流程分析