此题莫队可过

然而太难了......

我在胡雨菲那看的解法,然后自己打了一波,调了一个错,上交,自信AC。

做法:离线,对于L排序。

每种颜色可能出现很多次,那么我们如何不算重复呢?

只需把[L,n]区间内第一个出现的该颜色标为1即可。

所以我们记录下每个下标i所对应的颜色下一次出现的位置next[i]即可。

每次L挪动时,挪动的每个位置都-1(一定是1不是0),然后把next[i]+1即可。

所求即为∑[1,R]。

 #include <cstdio>
#include <algorithm>
#define lowbit(a) (a&(-a))
#define say(a) printf(#a);
#define ln printf("\n");
using namespace std;
const int N = ; struct Question
{
int L,R,ans,num;
}quest[];
int next[N],lastfind[N],x[N],tree[N],a[N];
int n;
bool cmp1(Question x,Question y) {return x.L<y.L;}
bool cmp2(Question x,Question y) {return x.num<y.num;}
void add(int x,int v)
{
if(x==) return;
for(int i=x;i<=n;i+=lowbit(i)) tree[i]+=v;
return;
}
int getsum(int x)
{
if(x==) return ;
int ans=;
for(int i=x;i>;i-=lowbit(i)) ans+=tree[i];
return ans;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]),x[i]=a[i];
int m;
scanf("%d",&m);
for(int i=;i<=m;i++) scanf("%d%d",&quest[i].L,&quest[i].R),quest[i].num=i;
sort(x+,x+n+);
int k=;
for(int i=;i<=n;i++) if(x[i]!=x[i-]) x[++k]=x[i]; /// 离散化
for(int i=;i<=n;i++)
{
int p=lower_bound(x+,x+k+,a[i])-x;///预处理出next[i]
if(lastfind[p]) next[lastfind[p]]=i;
else add(i,);///p -> i 这里调一个错,之前写的p
lastfind[p]=i;
}
int j=,ans=;
//for(int i=1;i<=6;i++) printf("%d ",getsum(i)-getsum(i-1));ln;
sort(quest+,quest+m+,cmp1);
for(int i=;i<=m;i++)
{
while(j<quest[i].L)
{ add(j,-);
add(next[j],);
j++;
}
//for(int i=1;i<=6;i++) printf("%d ",getsum(i)-getsum(i-1));ln
quest[i].ans=getsum(quest[i].R);
}
sort(quest+,quest+m+,cmp2);
for(int i=;i<=m;i++) printf("%d\n",quest[i].ans);
return ;
}

AC代码如下:

用了一些特殊的调试手法。。。

P1972 HHのnecklace 离线+树状数组的更多相关文章

  1. P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]

    题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...

  2. 洛谷 P1972"[SDOI2009]HH的项链"(离线+树状数组 or 在线+主席树)

    传送门 •题意 给你一个包含 n 个数的数组 $a$: 有 m 此操作,每次操作求区间 [l,r] 中不同数的个数: •题解(离线+树状数组) 以样例 $[1,2,3,4,3,5]$ 为例,求解区间 ...

  3. BZOJ 1878 HH的项链 (树状数组+离线)

    题目大意:给你一个序列,求某区间出现不同的数的个数. 貌似离线树状数组是最好的解法 先把所有询问挂在它们询问的右端点上 然后从头到尾遍历这个序列,记录这个位置的值上一次出现的位置 那么,当遍历到第i位 ...

  4. POJ 3416 Crossing --离线+树状数组

    题意: 给一些平面上的点,然后给一些查询(x,y),即以(x,y)为原点建立坐标系,一个人拿走第I,III象限的点,另一个人拿II,IV象限的,点不会在任何一个查询的坐标轴上,问每次两人的点数差为多少 ...

  5. HDU 2852 KiKi's K-Number(离线+树状数组)

    题目链接 省赛训练赛上一题,貌似不难啊.当初,没做出.离线+树状数组+二分. #include <cstdio> #include <cstring> #include < ...

  6. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组

    题目链接:CF #365 (Div. 2) D - Mishka and Interesting sum 题意:给出n个数和m个询问,(1 ≤ n, m ≤ 1 000 000) ,问在每个区间里所有 ...

  7. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)

    转载自:http://www.cnblogs.com/icode-girl/p/5744409.html 题目链接:CF #365 (Div. 2) D - Mishka and Interestin ...

  8. HDU3333 Turing Tree 离线树状数组

    题意:统计一段区间内不同的数的和 分析:排序查询区间,离线树状数组 #include <cstdio> #include <cmath> #include <cstrin ...

  9. 离线树状数组 hihocoder 1391 Countries

    官方题解: // 离线树状数组 hihocoder 1391 Countries #include <iostream> #include <cstdio> #include ...

随机推荐

  1. 安装sqlprompt

    特别说明:注册机会报毒,安装前请先关闭杀毒软件!下载好附件之后解压,打开SQLPrompt_7.2.0.241.exe按照提示安装完成.安装完成后断网!打开数据库,会在菜单栏中看到SQL Prompt ...

  2. Microsoft Visual Studio Ultimate 2013密钥

    Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 2013 KEY(密钥): ...

  3. C# Note28: Dispatcher类

    在项目中也是经常用到: 刚见到它时,你会想:为什么不直接使用System.Windows命名空间下的MessageBox类,何必要这么麻烦?(认真分析看它做了什么,具体原因下面解释) 主要介绍的方法: ...

  4. Your branch is ahead of 'origin/master' by 2 commits.

    遇到这种问题,表示在你之前已经有2个commit而没有push到远程分支上,所以需要先git push origin **将本地分支提到远程仓库.也可以直接git reset --hard HEAD~ ...

  5. idea 方便的设置代码段

    使用快捷键(ctrl+alt+s)找到:从idea的菜单File->Settings->Editor->Live Templates 先添加Template Group,然后添加Li ...

  6. dede:field name=’position’标签调用 主页改成英文Home和改变符号

    在用dede:field name=’position’ 这个标签的时候我们调用的这个就是中文的,出现的是主页>+相应的栏目  ,那么这个问题怎么改成英文的呢?有好多大虾都说找到dede安装目录 ...

  7. Yii2控制台命令

    Yii2控制台表格输出: 例如: $in_sheet_number_queue = []; $wms_material_in_sheet_list = \core\models\WmsMaterial ...

  8. JAVA不可变类(immutable)机制与String的不可变性--非常好.

    JAVA不可变类(immutable)机制与String的不可变性 https://www.cnblogs.com/jaylon/p/5721571.html

  9. SpringMvc父子容器

      使用监听器listener来加载spring的配置文件:如下 <context-param> <param-name>contextConfigLocation</p ...

  10. DotNetty 实现 Modbus TCP 系列 (三) Codecs & Handler

    本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 DotNetty 作为一个半成品,我们不需要关注细节的实现,只需要关注自己的业务即可,所以最主要的就是处理 Codecs ...