2743: [HEOI2012]采花

题目连接:

http://www.lydsy.com/JudgeOnline/problem.php?id=2743

Description

萧芸斓是Z国的公主,平时的一大爱好是采花。

今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某一颜色的花只有一朵。为此,公主每采一朵花,要么此前已采到此颜色的花,要么有相当正确的直觉告诉她,她必能再次采到此颜色的花。由于时间关系,公主只能走过花园连续的一段进行采花,便让女仆福涵洁安排行程。福涵洁综合各种因素拟定了m个行程,然后一一向你询问公主能采到多少朵花(她知道你是编程高手,定能快速给出答案!),最后会选择令公主最高兴的行程(为了拿到更多奖金!)。

Input

第一行四个空格隔开的整数n、c以及m。接下来一行n个空格隔开的整数,每个数在[1, c]间,第i个数表示第i朵花的颜色。接下来m行每行两个空格隔开的整数l和r(l ≤ r),表示女仆安排的行程为公主经过第l到第r朵花进行采花。

Output

共m行,每行一个整数,第i个数表示公主在女仆的第i个行程中能采到的花的颜色数。

Sample Input

5 3 5

1 2 2 3 1

1 5

1 2

2 2

2 3

3 5

Sample Output

2 0 0 1 0

Hint

题意

题解:

莫队会TLE,不要问我为什么知道……

所以就树状数组离线去搞吧

按照左端点排序,然后询问右端点就好了。

删除nxt[i]的时候,再把nxt[nxt[i]]加上去就行了。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int nxt[maxn],n,c,m,d[maxn],pos[maxn],v[maxn],ans[maxn];
int lowbit(int x){return x&(-x);}
void update(int x,int v){
if(x==0)return;
for(int i=x;i<maxn;i+=lowbit(i))
d[i]+=v;
}
int get(int x){
if(x==0)return 0;
int ans=0;
for(int i=x;i;i-=lowbit(i))
ans+=d[i];
return ans;
}
struct node{
int l,r,id;
}Q[maxn];
bool cmp(node a,node b){
return a.l<b.l;
}
int a[maxn];
int main(){
scanf("%d%d%d",&n,&c,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=n;i>=1;i--){
nxt[i]=pos[a[i]];
pos[a[i]]=i;
}
for(int i=1;i<=m;i++)
scanf("%d%d",&Q[i].l,&Q[i].r),Q[i].id=i;
sort(Q+1,Q+1+m,cmp);
for(int i=1;i<=n;i++){
if(!v[a[i]])update(nxt[i],1),v[a[i]]=1;
}
int now=0;
for(int i=1;i<=m;i++){
while(now<Q[i].l){
if(nxt[now]){
update(nxt[now],-1);
update(nxt[nxt[now]],1);
}
now++;
}
ans[Q[i].id]=get(Q[i].r);
}
for(int i=1;i<=m;i++)
printf("%d\n",ans[i]);
}

BZOJ 2743: [HEOI2012]采花 离线树状数组的更多相关文章

  1. bzoj 2743: [HEOI2012]采花【树状数组】

    离线,按照l排序 注意到在区间里出现两次的颜色才有贡献,所以记录一个ne[i]表示i后第一个和i同色的花,维护一个l,每次处理询问的时候l单调右移,树状数组维护,在ne[ne[i]]位置++,在ne[ ...

  2. 【BZOJ】2743: [HEOI2012]采花(树状数组)

    题目 传送门:QWQ 分析 已经凉凉.看错数据范围敲了发莫队........ 和HH的项链差不多,把每种颜色之前的颜色到再之前的颜色这段区间 区间加. 区间加就树状数组特技 代码 #include & ...

  3. 【BZOJ2743】[HEOI2012]采花 离线+树状数组

    [BZOJ2743][HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花, ...

  4. bzoj2743: [HEOI2012]采花--离线树状数组+差分

    题目大意:给定一个区间,查询子区间里出现次数不小于二的数的个数 此题想了好久没想出来,后来是在网上学习的一个方法 首先按查询区间的右端点进行排序,按右端点从小到大处理 假设pre[a[i]]是与a[i ...

  5. BZOJ 2743: [HEOI2012]采花( 离线 + BIT )

    处理出每个数下一个出现的位置, 然后按左端点排序回答询问.处理当前数去除的影响 ------------------------------------------------------------ ...

  6. [bzoj2743][HEOI2012]采花(树状数组)

    题目描述 萧薰儿是古国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花. 花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于 ...

  7. [bzoj2743][HEOI2012]采花_树状数组

    采花 bzoj-2743 HEOI-2012 题目大意:给定n朵花,每朵花有一个种类,m次询问:一段区间中至少出现两朵花的种类的个数. 注释:$1\le n,m\le10^6$. 想法:这个题超级像H ...

  8. [HEOI2012]采花(树状数组+离线)

    听说这题的所发和HH的项链很像. 然而那道题我使用莫队写的... 这是一个套路,pre数组加升维(在线). 记录一个\(pre\)数组,\(pre[i]\)代表上一个和i颜色相同的下标. 我们把询问离 ...

  9. BZOJ 2743: [HEOI2012]采花 [树状数组 | 主席树]

    题意: 查询区间中出现次数$>2$的颜色个数 一眼主席树,区间中$l \le last[i] \le r$的个数减去$l \le last[last[i]] \le r$的个数,搞两颗主席树来做 ...

随机推荐

  1. Python基础:内置异常(未完待续)

    本文根据Python 3.6.5的官文Built-in Exceptions编写,不会很详细,仅对Python的内置异常进行简单(重难点)介绍——很多异常都可以从名称判断出其意义,罗列所有的内置异常. ...

  2. 获取SQL Server的版本信息

    微软 SQL Server 版本号 产品名称 发行日期 主版本号 正式版 SP1 SP2 SP3 SP4 SQL Server 2016 2016.06.01 13.00.1601.5 13.00.1 ...

  3. 使用gradle编译安卓APK

    一.安装JDK 在安装Gradle之前需要先安装JDK,由于安装的是Gradle是4.4所以需要安装JDK1.8. 之前编译总是提示如下错误就是由于先安装的jdk1.7然后安装的1.8造成的,在Gra ...

  4. git —— 异常1,index.lock

    git提交过程中出现的问题 解决方法:找到 index.lock文件将其删除 一般 index.lock 在.git下面, 有时 .git 是隐藏的,但是无论怎样, 可以通过 everything 找 ...

  5. SQL存储过程相关信息查看

    --1.查看所有存储过程与函数      exec sp_stored_procedures     或者      select * from dbo.sysobjects where OBJECT ...

  6. Java字符串常见实例与函数

    字符串比较 字符串函数 compareTo (string) ,compareToIgnoreCase(String) 及 compareTo(object string) 来比较两个字符串,并返回字 ...

  7. CVE-2012-0158基于exp分析

    CVE-2012-0158这个洞我之前分析过,漏洞战争这本书里也写过,但是都是用poc分析的,我这次找了一个弹计算器的exp来分析,感觉用poc和用exp还是不一样的,从exp分析要比从poc分析更复 ...

  8. jenkins发布maven项目

    (1)环境介绍 (2)配置ssh配置:系统管理--->系统设置 做这样的配置是方便打包之后war包或jar包复制到/tomcat/update目录下 (3)安装git 1丶不要使用1.8版本以下 ...

  9. JS图片滚动代码(无缝、平滑)

    非常平滑的JS图片滚动特效代码,无缝循环,速度可自定义,鼠标悬停时停止.它的特点是JS和图片地址分离,这样做你就经易的从数据库动态调用每张图片的地址,方便控制,因此它非常的应用. <!DOCTY ...

  10. Hadoop整理五(基于Hadoop的数据仓库Hive)

    数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合.它是单个数据存储,出于分析性报告和决策支持目的而创建. 为需要业务智能的企业,提供指导业务流程改进.监视时间.成本.质量以及控 ...