HYSBZ 4551 (树状数组) 采花
题目:这里
题意:
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 4551 (树状数组) 采花的更多相关文章
- HYSBZ 2743 (树状数组) 采花
题目:这里 题意: 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记, ...
- BZOJ_2743_[HEOI2012]采花_离线+树状数组
BZOJ_2743_[HEOI2012]采花_离线+树状数组 Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大 ...
- BZOJ 2743: [HEOI2012]采花 离线树状数组
2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...
- 【BZOJ2743】[HEOI2012]采花 离线+树状数组
[BZOJ2743][HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花, ...
- 【bzoj2743】[HEOI2012]采花 树状数组
题目描述 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公 ...
- [HEOI2012]采花 树状数组 BZOJ 2743
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- [bzoj2743][HEOI2012]采花(树状数组)
题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...
- bzoj 2743: [HEOI2012]采花【树状数组】
离线,按照l排序 注意到在区间里出现两次的颜色才有贡献,所以记录一个ne[i]表示i后第一个和i同色的花,维护一个l,每次处理询问的时候l单调右移,树状数组维护,在ne[ne[i]]位置++,在ne[ ...
- bzoj2743: [HEOI2012]采花--离线树状数组+差分
题目大意:给定一个区间,查询子区间里出现次数不小于二的数的个数 此题想了好久没想出来,后来是在网上学习的一个方法 首先按查询区间的右端点进行排序,按右端点从小到大处理 假设pre[a[i]]是与a[i ...
随机推荐
- javascript this关键字指向详解
在之前写代码的经历中,常常试过写着写着this就莫名其妙的不知道指向到哪里去了.今天看了曾探的javascript设计模式,里面特别谈到了this在不同情况下指代的对象,非常有意思. this指代的情 ...
- 部署samba服务之后,在客户端用挂载访问的方式,错误信息:mount: block device //192.168.1.108/mysqldata is write-protected, mounting read-only mount: cannot mount block device //192.168.1.108/mysqldata read-only
部署samba服务之后,在客户端用挂载访问的方式,错误信息:mount: block device //192.168.1.108/mysqldata is write-protected, moun ...
- FreeMark学习(一)
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMark ...
- UE4.11新特性:胶囊体阴影
官方介绍 虚幻引擎现在支持非常柔滑的间接阴影,由代表角色的胶囊体来进行投影. 通常,在受间接光照时,并不会产生阴影,除非是屏幕空间环境遮罩.间接投影需要做的非常柔滑,因为间接光照是来自很多不同的方向, ...
- elasticsearch中常用的API
elasticsearch中常用的API分类如下: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作,查看索引信息等 查看API: ...
- web前端开发资源分享:学习计划及资料推荐
HTML & CSS W3C官网 HTML学习 CSS学习 书籍: <Head First HTML与CSS.XHTML(中文版)><CSS禅意花园(修订版)> 视频 ...
- Productivity Power Tools 动画演示(转)
Productivity Power Tools 是微软官方推出的 Visual Studio 扩展,被用以提高开发人员生产率.它的出现一定程度上弥补和完善了 Visual Studio 自身的不足, ...
- 从append追加的<tr>里传ID参数给js函数
今天这个小问题几乎把我整崩溃 $.each(data.list, function (index, item) { i++; shenhe = "待审核"; tixing = it ...
- Hibernate 中出现 users is not mapped 问题 (转)
今天晚上自己试着用Hibernate去搭建一个Web工程,然后去实现一个简单的登录. 通过Hibernate 做查询操作的时候总是报出这样的错: ...
- 带隙基准(Bandgap,BG)
Bandgap voltage reference,常常有人简单地称它为Bandgap.最经典的带隙基准是利用一个与温度成正比的电压与一个与温度成反比的电压之和,二者温度系数相互抵消,实现与温度无关的 ...