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
【样例说明】
  询问[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。

思路

  话说HE是哪里。。

  一开始打算用莫队做的,结果nsqrt(n)果断TTTTTTTTTT

  然后知道这种题在线是不可做的。。果断离线处理。

  将所有的询问[st,ed]按照st为第一关键字,ed为第二关键字排序。

  然后预处理记录下每个位置的花的下一个相同颜色的花的位置在哪里,i号位上的花的下一个记为next[i]

  首先对于所有的颜色的花next[next[pos[i]]++;(POS[i]是第一个第i种颜色的花的位置)

  然后由于询问的st被排过序,是递增的,那么我们维护一个变量L,每次处理新的询问的时候往右扫,对于那些原本在询问范围内但更新了询问范围后不在的花相应更新树状数组。

  

 #include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
#include <vector>
#include <ctime>
#include <functional>
#define pritnf printf
#define scafn scanf
#define sacnf scanf
#define For(i,j,k) for(int i=(j);i<=(k);(i)++)
#define Clear(a) memset(a,0,sizeof(a))
using namespace std;
typedef unsigned int Uint;
const int INF=0x3fffffff;
const double eps=1e-;
///==============struct declaration==============
struct Querys{
int st,ed,No;
bool operator <(const Querys &rhs) const{
return st==rhs.st?ed<rhs.ed:st<rhs.st;
}
};
///==============var declaration=================
const int MAXN=;
int n,c,m;
int color[MAXN],pos[MAXN],next[MAXN];
int A[MAXN],ans[MAXN];
Querys Query[MAXN];
///==============function declaration============
void Add_Bit(int x,int v);
int Query_Bit(int x);
int lowbit(int x){return x&-x;}
///==============main code=======================
int main()
{
#define FILE__
#ifdef FILE__
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
scanf("%d%d%d",&n,&c,&m);
for(int i=;i<=n;i++) scanf("%d",color+i);
for(int i=n;i>=;i--){
next[i]=pos[color[i]];
pos[color[i]]=i;
}
for(int i=;i<=c;i++)
if (next[pos[i]])
Add_Bit(next[pos[i]],);
for(int i=;i<=m;i++){
scanf("%d%d",&Query[i].st,&Query[i].ed);
Query[i].No=i;
}
sort(Query+,Query++m);
int L=;
for(int i=;i<=m;i++){
while (L<Query[i].st){
if (next[next[L]])
Add_Bit(next[next[L]],);
if (next[L])
Add_Bit(next[L],-);
L++;
}
ans[Query[i].No]=Query_Bit(Query[i].ed)-Query_Bit(Query[i].st-);
}
for(int i=;i<=m;i++)
printf("%d\n",ans[i]);
return ;
}
///================fuction code====================
void Add_Bit(int x,int v){
while (x<=n){
A[x]+=v;
x+=lowbit(x);
}
}
int Query_Bit(int x){
int res=;
while (x>){
res+=A[x];
x-=lowbit(x);
}
return res;
}

BZOJ1878

【HEOI2012】采花 BZOJ2743的更多相关文章

  1. [HEOI2012]采花 BZOJ2743

    分析: 听说主席树和莫队可以做,前者不想写,后者我不会... 我们考虑将询问离线,按照左端点排序,之后先处理好从1开始选的答案,之后枚举从1到n,之后依次删除nxt[i],添加nxt[nxt[i]], ...

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

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

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

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

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

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

  5. BZOJ 2743: [HEOI2012]采花

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

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

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

  7. BZOJ_2743_[HEOI2012]采花_离线+树状数组

    BZOJ_2743_[HEOI2012]采花_离线+树状数组 Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大 ...

  8. BZOJ 2743: [HEOI2012]采花 离线树状数组

    2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...

  9. cogs:1619. [HEOI2012]采花/luogu P2056

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿是 ...

  10. 1619. [HEOI2012]采花

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比 时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿 ...

随机推荐

  1. 火狐下js的日期比较的方法

    function tab(date1,date2){ var oDate1 = new Date(date1); var oDate2 = new Date(date2); if(oDate1.get ...

  2. Visual Stdio 无法直接启动带有“类库输出类型”的项目若要调试此项目,请在此解决方案中添加一个引用库项目的可执行项目。将这个可执行项目设置为启动项目!

    j解决方法:项目-属性-应用程序-输出类型-Windows应用程序

  3. electron 入门小白贴

    electron 入门小白贴 electron demo 跑起来! 毕设准备是做个 跨平台的做题的客户端,打算用 electron 来弄. 然而今天折腾了半天才终于吧demo给跑起来了.经历了许多的问 ...

  4. javascript 原型查找 再次试探~

    前言 我们知道 对象字面量 是没有能力去查找自己原型的,它必须通过他的构造器来完成原型查找, 1本文将测试以下 a,new这个对象 之前/之后 改变构造器的原型,使其指向其他构造器的原型 b,new这 ...

  5. java网络编程精解demo1---读取用户控制台的输入的数据并显示

    package test3; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream ...

  6. “(null)” is of a model that is not supported by this version of Xcode. Please use a different device.

    ios    真机运行程序就弹出这个"(null)" is of a model that is not supported by this version of Xcode. P ...

  7. CSS之列表标签

    1 无序列表 无序列表,用来表示一个列表的语义,并且每个项目和每个项目之间,是不分先后的. ul就是英语unordered list,"无序列表"的意思. li 就是英语list ...

  8. CSS-学习笔记三

    绝对定位:1. 脱离了文档流,没有浮动效果2. 默认情况下,设置了绝对定位的块,它的Top,left是相对于浏览器的3. 当给设置了绝对定位的块的父元素设置定位的时候(绝对.相对.固定),    那么 ...

  9. 【APP设计利器】Sketch 41 Mac中文破解版(含汉化插件)

    Sketch是一款拥有美观界面和强大功能适用于所有设计师的专业矢量绘图工具.它旨在为美术设计师创造出一款更优秀的作品,不是复制品,而是提升品.Sketch简约的设计是基于无限的规模和层次的绘图空间,免 ...

  10. Spring MVC学习笔记——引入静态文件

    1.在user-servlet.xml中加入以下代码,才能使得对静态文件的请求不被Controller捕获,而映射到一个固定的地址 <!-- 将静态文件指定到某个特殊的文件夹中统一处理 --&g ...