题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1878

分析:

莫队模板题
将询问分成sqrt(n)块,每一块按r分别排序。
从(l,r)得到(l,r+1)或(l,r-1)或(l+1,r)或(l-1,r)
①(l,r)到(l,r+1):判断新加入的颜色原来是否存在,若不存在就将种类加1
②(l,r)到(l,r-1):判断去掉的颜色在(l,r-1)中是否还存在,若不存在就将种类减1
③(l,r)到(l-1,r):判断新加入的颜色原来是否存在,若不存在就将种类加1
④(l,r)到(l+1,r):判断去掉的颜色在(l+1,r)中是否还存在,若不存在就将种类减1

代码:

type
  node=record
    l,r,id,pos:longint;
  end;
var
  c,cnt,ans:array [1..1000001] of int64;
  a:array [1..200001] of node;
  i,j:longint;
  m,n,l,r,k,block:int64;

procedure pai1(l,r:longint);
var
  i,j,mid1,mid2:longint;
  t:node;
begin
  i:=l;
  j:=r;
  mid1:=a[(l+r) div 2].pos;
  mid2:=a[(l+r) div 2].r;
  repeat
    while (a[i].pos<mid1) or ((a[i].pos=mid1) and (a[i].r<mid2)) do inc(i);
    while (a[j].pos>mid1) or ((a[j].pos=mid1) and (a[j].r>mid2)) do dec(j);
    if i<=j then
    begin
      t:=a[i];
      a[i]:=a[j];
      a[j]:=t;
      inc(i);
      dec(j);
    end;
  until i>j;
  if l<j then pai1(l,j);
  if i<r then pai1(i,r);
end;

begin
  assign(input,'necklace.in');
  assign(output,'necklace.out');
  reset(input);
  rewrite(output);

readln(n);
  for i:=1 to n do
  read(c[i]);
  readln;
  block:=trunc(sqrt(n));
  readln(m);
  for i:=1 to m do
  begin
    a[i].id:=i;
    readln(a[i].l,a[i].r);
    a[i].pos:=(a[i].l-1) div block+1;
  end;
  pai1(1,m);
  l:=1;
  r:=0;
  for i:=1 to m do
  begin
    if a[i].l=a[i].r then
    begin
      ans[a[i].id]:=1;
      continue;
    end;
    while r<a[i].r do
    begin
      inc(r);
      if cnt[c[r]]=0 then
      inc(k);
      inc(cnt[c[r]]);
    end;
    while r>a[i].r do
    begin
      dec(cnt[c[r]]);
      if cnt[c[r]]=0 then
      dec(k);
      dec(r);
    end;
    while l<a[i].l do
    begin
      dec(cnt[c[l]]);
      if cnt[c[l]]=0 then
      dec(k);
      inc(l);
    end;
    while l>a[i].l do
    begin
      dec(l);
      if cnt[c[l]]=0 then
      inc(k);
      inc(cnt[c[l]]);
    end;
    ans[a[i].id]:=k;
  end;
  for i:=1 to m do
  writeln(ans[i]);

close(input);
  close(output);
end.

数据:http://download.csdn.net/detail/boyxiejunboy/9423259

莫队bzoj1878相关推荐

  1. BZOJ1878(SDOI2009)[HH的项链]题解--莫队

    [链接] bzoj1878 [题目大意] 给你一个序列,让你求一段区间中不同数的个数. [解题报告] 此题可以用莫队算法解,n比较小.(其实也可以用数状数组解,但本蒟蒻很懒就没写了..) #inclu ...

  2. 【BZOJ1878】【codevs2307】HH的项链,莫队算法

    传送门1 传送门2 写在前面:信息课上的莫队练习 思路:比小Z的袜子还要简单些,不过BZOJ上4s的总时限确实把我吓了一跳 注意:种类编号为0-1000000,小心数组越界导致RE 代码: #incl ...

  3. NBUT 1457 Sona(莫队算法+离散化)

    [1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...

  4. XOR and Favorite Number CF340E 莫队算法

    题目链接 题意:求给定询问区间[L,R]问有多少连续区间异或值等k,多次询问可以离线. a[i]^a[i+1]^a[i+2]^a[n]=(a[1]^a[2]^a[3]^...^a[i-1])^(a[1 ...

  5. Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组

    题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...

  6. 【莫队算法】bzoj3781 小B的询问

    莫队经典. 开个数组维护a[i]出现的次数. 1 #include<cstdio> 2 #include<cmath> 3 #include<algorithm> ...

  7. bzoj 3339 莫队

    题意: 求任意一个区间的SG函数. 想到线段树,但是线段树合并很麻烦. 线段树--分块. 分块的一个应用就是莫队算法. 怎么暴力递推呢? 从一个区间到另一个区间,Ans 取决于 Ans 和 加入和删除 ...

  8. HDU6964 I love counting (字典树+莫队)

    题意: 给定一个长度为 nnn 的序列c,qc,qc,q 次询问,每次给出l,r,a,bl,r,a,bl,r,a,b求在[l,r][l,r][l,r]中有多少种不同的值 kkk 满足 k⊕a≤b​.k ...

  9. 2021HDU多校第一场 zoto(莫队+分块)

    题意: 给你一个序列,q次询问,每次询问l-r的区间内数字大小为x-y之间内不重复的个,保证数据所有大小为1e5以内. 思路: 比赛的时候通过调整了一下分块的大小和各种优化,用莫队把题目给卡过去了,实 ...

最新文章

  1. day 2 基本类型和函数
  2. python下载安装教程图解-一招解决:各种版本的Python下载安装教程
  3. UA MATH567 高维统计II 随机向量3 常见的高维随机向量的分布
  4. 安卓SlidingDrawer
  5. 【BZOJ2809】【codevs1763】派遣,主席树记录前缀和
  6. 8. GD32F103C8T6 定时器-输入捕获测频率
  7. 4k*1芯片 计算机组成,计算机组成原理的大神们能不能帮忙做几道题啊
  8. web前端顶岗实习总结报告_假期web前端实习报告
  9. 网站图片优化方法有哪些
  10. 高版本linux安装gamit,Linux下安装GAMIT10.5
  11. Iphone手机,调用微信支付JSAPI缺少参数 timeStamp
  12. pc端支付宝扫码支付
  13. 博弈DP:PIPI的炸弹
  14. 深圳租房数据可视化分析【Plotly库绘图】
  15. arcscene如何制作三维真实场景
  16. C语言实现高精度减法
  17. Matlab轮廓线图的绘制
  18. 华为设备用户接入与认证配置命令
  19. python的介绍和及基本的使用
  20. 【华为认证】HCIP-Datacom 2023最新题库

热门文章

  1. sqlserve 热备用状态更新_圣诞热红酒,冬日里的暖心滋味,做法原来这么简单
  2. 阿里巴巴开源的免费数据库工具Chat2DB
  3. Hadoop命令参考
  4. ios 内购正式环境_iOS 内购最新讲解
  5. 计网-ch01-题目与解释
  6. Windchill中的基本业务对象
  7. 优秀员工必备的职业精神
  8. 英伟达就虚假宣传提出协议:赔偿每个用户30美元
  9. (摘自邀月csdn)安装sql2008 enterprise (English正式版)图解
  10. 小小知识点(二十一)如何修改PPT母版上无法直接点击修改的文字