[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 ...
随机推荐
- 脚本实现centos7修改二块网卡名称并配置ip信息
#!/bin/bash interface1=`ls /sys/class/net|grep en|awk 'NR==1{print}'`interface2=`ls /sys/class/net|g ...
- PH日期格式化
%M 月名字(January--December) %W 星期名字(Sunday--Saturday) %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等.) %Y 年, 数字, 4 位 ...
- mysql5.7中解决中文乱码的问题
在使用mysql5.7时,会发现通过web端向数据库中写入中文后会出现乱码,但是在数据库中直接操作SQL语句插入数据后中文就显示正常,这个问题怎么解决呢?此处不对mysql的数据编码过程和原理进行讲解 ...
- Js中的subStr和subString的区别
/** * Created by lonecloud on 16/9/8. */ var str="HelloWorld"; /** * 这里的两个参数第一个是从0到第几个开始第二 ...
- Https访问
Let's Encrypt是很火的一个免费SSL证书发行项目,自动化发行证书,证书有90天的有效期.适合个人使用或者临时使用,不用再忍受自签发证书不受浏览器信赖的提示.去年VPS侦探曾经说过Let's ...
- Spring boot 整合mybatis
第一步:创建maven项目并添加spring boot依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...
- HDU - 2154 线性dp
思路:0表示A,1表示B,2表示C,d(i, j)表示在第j次时正好到达i. AC代码 #include <cstdio> #include <cmath> #include ...
- python中 字符 字典 列表之间的转换
1 字典 转 字符 定义一个字典:dict = {'name': 'python', 'age': 7}字典转字符 可以使用str强制转换 如: str(dict) 此时dict的类型就是字符型了 2 ...
- home目录迁移至新分区
在用户home目录越来越大时,就可以考虑将home目录迁移至新的分区. 1.创建新分区. fidisk /dev/sda:用磁盘管理器打开磁盘 n:新建 +10g :设置分区为10G w :保存 保存 ...
- 为什么说DOM操作很慢
转自http://www.cnblogs.com/yuzhongwusan/articles/5275933.html 一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大 ...