HYSBZ 2743 (树状数组) 采花
题目:这里
题意:
Input
Output
输出一个正整数,表示结果
Sample Input
1 2
1 3
2 4
2 5
Q 2
C 2
Q 2
Q 5
Q 3
Sample Output
2
2
1
HINT
明显与两个相同的数在数组中的位置有关系。
求出颜色数组的前缀(前面一个该颜色值的位置)或者后缀(后一个该颜色的位置,以后缀为例),这里可以用树状数组解决,将给没个询问区间按照左范围从小到大
排序,然后遍历一边大区间1到n,当 i 小于询问范围左端点的的时候将其加入树状数组,等于询问范围左端点的时候既求区间范围和,注意的是,由于只有同种
颜色的花的数目大于1才算,所以事先将符合条件的花先加进数组,然后遍历的时候考虑失去 i 这个位置的时候是加一还是减一
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int M = 1e6 + ;
int has[M],has1[M],vis[M],b[M],ans[M],n;
int q[M]; struct node{
int x,y,id;
}a[M]; int lowbit(int x){return x&(-x);} void add(int x,int y)
{
while (x<=M){
has[x]+=y;
x+=lowbit(x);
}
} int getsum(int x)
{
int ans=;
while (x>){
ans+=has[x];
x-=lowbit(x);
}
return ans;
} bool cmp(node a,node b)
{
if (a.x==b.x) return a.y<b.y;
return a.x<b.x;
} int main()
{
int c,m;
bool flag=false;
scanf("%d%d%d",&n,&c,&m);
memset(vis,,sizeof(vis));
memset(has1,,sizeof(has1));
for (int i= ; i<=n ; i++){
scanf("%d",&b[i]);
/*if (has1[b[i]]==0) vis[i]=i,has1[b[i]]=i;
else{
vis[i]=has1[b[i]];
has1[b[i]]=i;
}*/
}
for(int i=n ;i>= ; i--){ //求后缀
vis[i]=has1[b[i]];
has1[b[i]]=i;
}
for (int i= ; i<=m ; i++){
scanf("%d%d",&a[i].x,&a[i].y);
a[i].id=i;
}
for(int i= ; i<=c ; i++){ //满足的先加上
if (vis[has1[i]])
add(vis[has1[i]],);
//cout<<has1[i]<<endl;
}
sort(a+,a+m+,cmp);
int j=;
// memset(q,0,sizeof(q));
for(int i= ; i<=m ; i++){
while (j<a[i].x){
if (vis[vis[j]])add(vis[vis[j]],);
if (vis[j]) add(vis[j],-);
j++;
}
ans[a[i].id]=getsum(a[i].y)-getsum(a[i].x-);
}
for (int i= ; i<=m ; i++){
printf("%d\n",ans[i]);
}
//cout<<getsum(1)<<endl;
return ;
}
HYSBZ 2743 (树状数组) 采花的更多相关文章
- HYSBZ 4551 (树状数组) 采花
题目:这里 题意: 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记, ...
- bzoj 2743 树状数组离线查询
我们按照询问的右端点排序,然后对于每一个位置,记录同颜色 上一个出现的位置,每次将上上位置出现的+1,上次出现的-1,然后 用树状数组维护就好了 /************************** ...
- BZOJ 2743 树状数组
不能用分块. #include <bits/stdc++.h> using namespace std; ; struct Info{int l,r,Id;}Q[Maxn]; int a[ ...
- BZOJ 2743: [HEOI2012]采花 离线树状数组
2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...
- [HEOI2012]采花 树状数组 BZOJ 2743
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- bzoj 2743: [HEOI2012]采花【树状数组】
离线,按照l排序 注意到在区间里出现两次的颜色才有贡献,所以记录一个ne[i]表示i后第一个和i同色的花,维护一个l,每次处理询问的时候l单调右移,树状数组维护,在ne[ne[i]]位置++,在ne[ ...
- BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]
题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...
- 【BZOJ】2743: [HEOI2012]采花(树状数组)
题目 传送门:QWQ 分析 已经凉凉.看错数据范围敲了发莫队........ 和HH的项链差不多,把每种颜色之前的颜色到再之前的颜色这段区间 区间加. 区间加就树状数组特技 代码 #include & ...
- BZOJ_2743_[HEOI2012]采花_离线+树状数组
BZOJ_2743_[HEOI2012]采花_离线+树状数组 Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大 ...
随机推荐
- 基于wepy和云开发的动漫资讯小程序----233次元
233次元小程序 # 233次元小程序 项目描述- 基于微信小程序的动漫咨询小程序,采用`wepy`框架开发:- 后台数据采用小程序的云开发存储: 线上体验 部分截图 ...
- 一文洞悉Python必备50种算法!资深大牛至少得掌握25种!
一.环境需求 二.怎样使用 三.本地化 3.1扩展卡尔曼滤波本地化 3.2无损卡尔曼滤波本地化 3.3粒子滤波本地化 3.4直方图滤波本地化 四.映射 4.1高斯网格映射 4.2光线投射网格映射 4. ...
- springcloud相关资料收集
http://springboot.fun/ Spring Boot 中文索引 http://springcloud.fun/ Spring Cloud 中文索引 https://spring ...
- 稀疏矩阵 part 1
▶ 图片参考[http://www.bu.edu/pasi/files/2011/01/NathanBell1-10-1000.pdf] ▶ 各种系数矩阵的数据结构 ● MAT,原始矩阵数据 type ...
- python-day18 JS正则,组件BootStrap、EasyUI、JQueryUI1,插件轮播,django
@第一节课程内容 js正则 登录注册验证 @text-判断字符串是否符合规定的正则 @exec-获取匹配的数据 bootstrap(组件) –css –js 学习bootstrap规则 jQueryu ...
- Burpsuite Sqlmap Nmap入门总结
burpsuite sqlmap nmap 简介 sqlmap基础 五种独特sql注入技术: 基于布尔类型的盲注 基于时间的盲注 基于报错注入 联合查询注入 堆查询注入 sqlmap入门 1.判断是否 ...
- 应用MySQL(开启远程登录权限)
参考“开启MySQL远程访问权限 允许远程连接”.
- 获取的是 string 类型的字段,直接输出 数字 或者 需要的第几行
Freight = driver.find_element_by_xpath("//tbody/tr/td[6]").text print(type(Freight)) # 这里输 ...
- JSon与字符串的转换
json字符串转化成json对象 // jquery的方法 var jsonObj = $.parseJSON(jsonStr) //js 的方法 var jsonObj = JSON.parse(j ...
- MyEclipse2014破解版安装教程
下载安装包和破解程序脚本 1.下载地址 链接:https://pan.baidu.com/s/1XuMweEz602zcoGqwPb2xTA 提取码:idsx 两个文件:myeclipse-pro- ...