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

#include"bits/stdc++.h"
using namespace std;
int m,n,tot,last_l=1,last_r;
int a[50010],block[50010],flag[1000001];
struct os
{int l,r,num,ans;
}q[200010];
int cmp1(os x,os y)
{if (block[x.l]<block[y.l]) return 1;if (block[x.l]>block[y.l]) return 0;return x.r<y.r;
}
int cmp2(os x,os y){return x.num<y.num;}
int in()
{int f=1,t=0;char ch=getchar();while (ch>'9'||ch<'0'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9') t=t*10+ch-'0',ch=getchar();return f*t;
}
main()
{n=in();for (int i=1;i<=n;i++) a[i]=in();block[0]=sqrt(n);for (int i=1;i<=n;i++)block[i]=(i-1)/block[0]+1;m=in();for (int i=1;i<=m;i++)q[i].l=in(),q[i].r=in(),q[i].num=i;sort(q+1,q+m+1,cmp1);for (int i=1;i<=m;i++){if (q[i].r>last_r)for (int j=last_r+1;j<=q[i].r;j++){if (!flag[a[j]]) tot++;flag[a[j]]++;}if (q[i].r<last_r)for (int j=last_r;j>q[i].r;j--){flag[a[j]]--;if (!flag[a[j]]) tot--;}if (q[i].l<last_l)for (int j=last_l-1;j>=q[i].l;j--){if (!flag[a[j]]) tot++;flag[a[j]]++;}if (q[i].l>last_l)for (int j=last_l;j<q[i].l;j++){flag[a[j]]--;if (!flag[a[j]]) tot--;}last_l=q[i].l;last_r=q[i].r;q[i].ans=tot;}sort(q+1,q+m+1,cmp2);for (int i=1;i<=m;i++) printf("%d\n",q[i].ans);
}

【BZOJ1878】【codevs2307】HH的项链,莫队算法相关推荐

  1. BZOJ-1878: [SDOI2009]HH的项链(莫队算法)

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 4857  Solved: 2401 [Submit][Sta ...

  2. BZOJ 1878: [SDOI2009]HH的项链 | 莫队

    题解: http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题解: 莫队板子题 核心思想是对区间的询问离线之后按照合理的顺序来优化复杂度 一般的做 ...

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

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

  4. C++ 莫队算法(转)

    胡小兔的良心莫队教程:莫队.带修改莫队.树上莫队 在开始学习莫队之前,照例先甩一道例题:BZOJ 1878 HH的项链. 题意:求区间内数的个数,相同的数只算一次. 在我关于这道题的上一篇题解中,我使 ...

  5. 离线区间的神奇——莫队算法

    离线区间的神奇--莫队算法 前言 一.什么是莫队算法? 二.例题分析: 1.相关例题 题目描述 输入格式 输出格式 简单分析: 三.莫队算法思想: 那么要怎么做(预处理):莫队算法优化的核心是**分块 ...

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

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

  7. 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 ...

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

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

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  10. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到 ...

最新文章

  1. 这些算法在印度农村医疗中发挥极大作用,未来还将发挥哪些作用?
  2. shell学习之shell基础知识了解
  3. 计算机键盘的设计原理图,人体工程学键盘的设计原理
  4. IE6常见bug总结
  5. python基础一 -------如何在列表字典集合中根据条件筛选数据
  6. 【渝粤教育】电大中专测量学 (5)作业 题库
  7. C++:11---友元函数、友元类
  8. 幼儿学数数的c语言程序,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...
  9. 50matches:更准确的搜索引擎
  10. 事务演练 mysql
  11. ipad无法充电怎么办_哈尔滨Ipad死机了维修费用价目表_京宏通讯器材维修培训学校...
  12. JAVA的引用类型变量(C/C++中叫指针)
  13. 网页游戏开发基础——网页基础知识
  14. win10电脑性能测试软件,win10系统测试计算机性能的图文方法
  15. [转]欧洲航天局计划于2018年登月寻水
  16. 关于王小云破解MD5
  17. dk 图解计算机科学pdf,DK英语:7套DK经典图解词典,再也不用死记硬背了!
  18. 彻底删除卸载2345安全卫士及2345浏览器
  19. 1467 acm 矩阵不同行列的和
  20. 《数据库系统工程师》备考指南

热门文章

  1. 大型情感剧集Selenium:3_元素定位 #华为云·寻找黑马程序员#
  2. 通过kubeadm安装kubernetes 1.13.2
  3. 关于爬虫本地JS Hook的研究
  4. 【技术角度看问题之一】ARM到底是个啥?
  5. linux内核完全剖析0.11,linux0.11内核完全剖析 - ramdisk.c
  6. 运用经验模态分解方法(EMD)对实测探地雷达数据进行处理
  7. 基于Matlab的跨孔CT胖射线追踪算法(三)
  8. PyQt5学习笔记(二) 文本控件及使用
  9. poj 1847 Tram 最短路 dijkstra、floyed
  10. poj 2387 Til the Cows Come Home dijkstra