[BZOJ2743] [HEOI2012] 采花 (树状数组)
Description
Input
Output
Sample Input
1 2 2 3 1
1 5
1 2
2 2
2 3
3 5
Sample Output
0 0 1 0
询问[1, 5]:公主采颜色为1和2的花,由于颜色3的花只有一朵,公主不采;询问[1, 2]:颜色1和颜色2的花均只有一朵,公主不采;
询问[2, 2]:颜色2的花只有一朵,公主不采;
询问[2, 3]:由于颜色2的花有两朵,公主采颜色2的花;
询问[3, 5]:颜色1、2、3的花各一朵,公主不采。
HINT
对于100%的数据,1 ≤ n ≤ 10^6,c ≤ n,m ≤10^6。
Source
Solution
HH的项链即视感,保证该颜色第二次在区间内出现时答案+1即可
#include <bits/stdc++.h>
using namespace std;
const int MAXN = ;
struct query
{
int id, l, r;
bool operator < (const query &rhs) const
{
return l == rhs.l ? r < rhs.r : l < rhs.l;
}
}q[MAXN];
int n, a[MAXN], fst[MAXN], nxt[MAXN], BIT[MAXN], ans[MAXN]; void update(int x, int val)
{
for(; x <= n; x += x & -x)
BIT[x] += val;
} int query(int x)
{
int ans = ;
for(; x; x -= x & -x)
ans += BIT[x];
return ans;
} int main()
{
int m, l = , c;
scanf("%d%d%d", &n, &c, &m);
for(int i = ; i <= n; i++)
scanf("%d", a + i);
for(int i = n; i; i--)
nxt[i] = fst[a[i]], fst[a[i]] = i;
for(int i = ; i <= c; i++)
if(nxt[fst[i]]) update(nxt[fst[i]], );
for(int i = ; i <= m; i++)
scanf("%d%d", &q[i].l, &q[i].r), q[i].id = i;
sort(q + , q + m + );
for(int i = ; i <= m; i++)
{
while(l < q[i].l - )
{
if(nxt[++l]) update(nxt[l], -);
if(nxt[nxt[l]]) update(nxt[nxt[l]], );
}
ans[q[i].id] = query(q[i].r) - query(q[i].l - );
}
for(int i = ; i <= m; i++)
printf("%d\n", ans[i]);
return ;
}
[BZOJ2743] [HEOI2012] 采花 (树状数组)的更多相关文章
- [bzoj2743][HEOI2012]采花(树状数组+离线)
2743: [HEOI2012]采花 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 1832 Solved: 954[Submit][Status] ...
- bzoj2743 [HEOI2012]采花——树状数组+离线
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2743 和 HH的项链 那道题很像,也是类似的做法: 但不同的是这里的点只有有前驱时才起作用: ...
- 【bzoj2743】[HEOI2012]采花 树状数组
题目描述 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公 ...
- [HEOI2012]采花 树状数组 BZOJ 2743
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]
题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...
- [bzoj2743][HEOI2012]采花(树状数组)
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- BZOJ2743 HEOI2012采花(离线+树状数组)
如果能够把所有区间内第二次出现某颜色的位置标记出来,树状数组查询一下就可以了. 考虑离线.按左端点从小到大排序,不断移动左端点并更新第二次出现的位置. #include<iostream> ...
- BZOJ-2743: [HEOI2012]采花 前缀和 树状数组
BZOJ-2743 LUOGU:https://www.luogu.org/problemnew/show/P4113 题意: 给一个n长度的序列,m次询问区间,问区间中出现两次及以上的数字的个数.n ...
- bzoj2743: [HEOI2012]采花--离线树状数组+差分
题目大意:给定一个区间,查询子区间里出现次数不小于二的数的个数 此题想了好久没想出来,后来是在网上学习的一个方法 首先按查询区间的右端点进行排序,按右端点从小到大处理 假设pre[a[i]]是与a[i ...
随机推荐
- 一个脚本从git上pull 并更新到服务器
#/bin/bash cd /src/pid01-beta/ echo "update pid01.." git pull ]; then echo "update pi ...
- MySQL select语句直接导出数据
select * into outfile '文件存放路径' from 表名; (先记下来,还未测试)
- 解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList这个问题
今天使用SSM框架,用@ResponseBody注解,出现了这个问题 java.lang.IllegalArgumentException: No converter found for return ...
- PHP中的浮点精度和类型
PHP中的浮点数 精度 在PHP中,浮点数的字长和平台相关,通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式). 浮点数的精度有限.尽管取决于系统,PHP 通常 ...
- 避免Toast重复弹出
Toast.matkText才会创建一个新的实例 private Toast toast = null; private void checkToastResult() { if (toast != ...
- 使用TensorFlow的卷积神经网络识别自己的单个手写数字,填坑总结
折腾了几天,爬了大大小小若干的坑,特记录如下.代码在最后面. 环境: Python3.6.4 + TensorFlow 1.5.1 + Win7 64位 + I5 3570 CPU 方法: 先用MNI ...
- Luogu P1078 文化之旅
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...
- 沉淀,再出发——在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享
在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享 一.工作准备 首先,明确工作的重心,在Ubuntu Kylin15.04中配置Hadoop集群,这里我是用的双系统中的 ...
- (2018干货系列一)最新Java学习路线整合
怎么学Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. 话不多说,直接上干货: ...
- ajax常用实例代码总结新手向参考(一)
http的交互方法有四种:get.post.put(增加数据).delete(删除数据) put和delete实现用的是get和post get方式 页面不能被修改,只是获取查询信息.但是提交的数 ...