做法是每个询问先算出询问区间中花的种类减去区间中只有一朵花的花的种类,这两个子问题都不算难,具体看代码吧。询问可以离线处理,用树状数组维护,复杂度O(nlogn)。

  不知道是想的复杂了还是打的太low,运行时间有点久。。

  代码

  

 #include<cstdio>
#include<algorithm>
#include<vector>
#define pb push_back
#define mp make_pair
#define fi first
#define sc second
#define lb(x) (x&-x)
#define N 1000010
#define P 1000000007
using namespace std;
int n,c[N],C,m,i,a,j,b,ans[N],e[N];
int pos[N],next[N];
vector<int> vec[N];
vector<pair<int,int> > q[N],vec2[N];
void cc(int x,int w)
{
while (x<=n)
{
c[x]+=w;
x+=lb(x);
}
}
int sum(int x)
{
int ans=;
while (x)
{
ans+=c[x];
x-=lb(x);
}
return ans;
}
int main()
{
scanf("%d%d%d",&n,&C,&m);
for (i=;i<=n;i++)
{
scanf("%d",&a);
e[i]=a;
vec[pos[a]].pb(i);
next[pos[a]]=i;
pos[a]=i;
}
for (i=;i<=C;i++)
pos[i]=;
for (i=;i<=n;i++)
{
vec2[pos[e[i]]].pb(mp(i,next[i]));
pos[e[i]]=i;
} for (i=;i<=m;i++)
{
scanf("%d%d",&a,&b);
q[a].pb(mp(b,i));
}
for (i=;i<=n;i++)
{
if (i)
for (j=;j<q[i].size();j++)
ans[q[i][j].sc]=sum(q[i][j].fi)-sum(i-);
for (j=;j<vec[i].size();j++) cc(vec[i][j],);
}
for (i=;i<=n;i++) c[i]=;
for (i=;i<vec2[].size();i++) cc(vec2[][i].fi,-); for (i=;i<=n;i++)
{
if (i)
for (j=;j<q[i].size();j++)
ans[q[i][j].sc]-=sum(q[i][j].fi)-sum(i-);
for (j=;j<vec2[i].size();j++)
{
cc(vec2[i][j].fi,);
if (vec2[i][j].sc)
cc(vec2[i][j].sc,-);
}
}
for (i=;i<=m;i++)
printf("%d\n",ans[i]);
}

bzoj2743 [HEOI2012]采花的更多相关文章

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

    2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 1832  Solved: 954[Submit][Status] ...

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

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

  3. [BZOJ2743] [HEOI2012] 采花 (树状数组)

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

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

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

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

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

  6. BZOJ2743 HEOI2012采花(离线+树状数组)

    如果能够把所有区间内第二次出现某颜色的位置标记出来,树状数组查询一下就可以了. 考虑离线.按左端点从小到大排序,不断移动左端点并更新第二次出现的位置. #include<iostream> ...

  7. BZOJ-2743: [HEOI2012]采花 前缀和 树状数组

    BZOJ-2743 LUOGU:https://www.luogu.org/problemnew/show/P4113 题意: 给一个n长度的序列,m次询问区间,问区间中出现两次及以上的数字的个数.n ...

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

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

  9. 【树状数组】bzoj2743 [HEOI2012]采花

    http://www.cnblogs.com/proverbs/archive/2012/10/29/2745281.html (↑)这样处理之后,每次询问时,对于每种颜色,从1到其倒数第二次出现的位 ...

随机推荐

  1. 1106 C程序语法树

  2. netbeans环境搭建

    1.下载文件http://pan.baidu.com/s/1kUu52mV 2.安装. 3.设置字体颜色,原先的太亮,我设置了保护色,参照sublime 我设置的字体高亮效果http://pan.ba ...

  3. JSON格式解析和libjson使用简介(关于cjson的使用示例)

    JSON格式解析和libjson使用简介 在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据 ...

  4. asp.net中iframe页面用jQuery向父页面传值

    在asp.net页面有时一个页面会通过iframe嵌套另一个页面,下面的例子讲述的是被嵌套的iframe页面向父页传值的一种方式,用jQuery即可. iframe页面代码: <!DOCTYPE ...

  5. 二级c程序设计题(1)

    原文:http://www.cnblogs.com/imaker/p/6120951.html 所属年份:2010.9;2011.3;2012.3;请编写函数fun,其功能是:找出2×M整型二维数组中 ...

  6. hexo 搭建博客

    使用hexo搭建网站.记录一下. hexo搭建方法: https://wsgzao.github.io/post/hexo-guide/ http://jacob110.github.io/2015/ ...

  7. http://blog.csdn.net/tiantiandjava/article/details/46777051

    http://blog.csdn.net/tiantiandjava/article/details/46777051

  8. 还原ORACLE DUMP 的值

    还原DUMP出来的数字SQL> select dump(2000,16) from dual; DUMP(2000,16)------------------Typ=2 Len=2: c2,15 ...

  9. Python开发【第二章】:Python的数据类型

    基本数据类型 一.整型 如: 18.73.84 整型具备如下功能: class int(object): """ int(x=0) -> int or long i ...

  10. (转)Eclipse New Server 【无法输入server name】

    I was trying to add Tomcat 7 in my Eclipse in Ubuntu. When I click “Add new server” in Eclipse and s ...