题目传送门

 /*
题意:从i开始,之前出现过的就是之前的值,否则递增,问第p个数字是多少
莫队算法:先把a[i+p-1]等效到最前方没有它的a[j],问题转变为求[l, r]上不重复数字有几个,裸莫队:)
*/
#include <cstdio>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <cmath>
#include <cstring>
using namespace std; const int MAXN = 2e6 + ;
const int INF = 0x3f3f3f3f;
map<int, int> table;
vector<int> V[MAXN];
int cnt[MAXN];
int a[MAXN];
int ans[MAXN];
struct Data
{
int b, l, r, id;
Data () {}
Data (int b, int l, int r, int id) : b (b), l (l), r (r), id (id) {};
}data[MAXN];
int n, m;
int ret; bool cmp(Data x, Data y)
{
if (x.b == y.b) return x.r < y.r;
else return x.b < y.b;
} void updata(int v)
{
if (v == ) ret++;
else if (v == ) ret--;
} void Modui(void)
{
sort (data+, data++m, cmp);
memset (cnt, , sizeof (cnt)); int l = , r = ; ret = ;
for (int i=; i<=m; ++i)
{
while (data[i].l < l)
{
++cnt[a[--l]];
if (cnt[a[l]] == ) ret++;
}
while (data[i].l > l)
{
--cnt[a[l]];
if (cnt[a[l]] == ) ret--;
l++;
}
while (data[i].r > r)
{
++cnt[a[++r]];
if (cnt[a[r]] == ) ret++;
}
while (data[i].r < r)
{
--cnt[a[r]];
if (cnt[a[r]] == ) ret--;
r--;
} ans[data[i].id] = ret;
} for (int i=; i<=m; ++i)
{
printf ("%d\n", ans[i]);
}
} int main(void) //Gym - 100496D Data Mining
{
// freopen ("D.in", "r", stdin);
freopen ("data.in", "r", stdin);
freopen ("data.out", "w", stdout); while (scanf ("%d", &n) == )
{
table.clear ();
for (int i=; i<=n; ++i) V[i].clear (); int num = ;
for (int i=; i<=n; ++i)
{
scanf ("%d", &a[i]);
a[i] = table[a[i]] ? table[a[i]] : table[a[i]] = ++num;
V[a[i]].push_back (i);
} int block = (int) sqrt (n * 1.0);
scanf ("%d", &m);
for (int i=; i<=m; ++i)
{
int l, r; scanf ("%d%d", &l, &r);
r = l + r - ;
int pos = lower_bound (V[a[r]].begin (), V[a[r]].end (), l) - V[a[r]].begin ();
r = V[a[r]][pos];
data[i] = Data (l / block, l, r, i);
} Modui ();
} return ;
}

最新文章

  1. 逻辑思维面试题-java后端面试-遁地龙卷风
  2. 初探Bootstrap之十二栅格
  3. 在 mysql 中利用 Duplicate key, 一句话实现存在的更新不存在插入功能
  4. 网络编程(一)——InetAddress
  5. zoj3820 Building Fire Stations 树的中心
  6. [改善Java代码]枚举项的数量限制在64个以内
  7. 激活Navicat?如何注册Navicat?
  8. Bootstrap V3使用Tab标签
  9. RAC 常用维护工具和命令(oracle 10g)
  10. Software Development and Newton&amp;#39;s Laws of Motion
  11. iOS数据本地化
  12. Shell 正则表达式总结及其含义举例
  13. (转)InFluxDB数据库使用手册
  14. Nginx 用分片提示缓存效率
  15. 【C++ Primer 第10章】 10.4.2 插入迭代器
  16. SQL逻辑查询语句执行顺序 需要重新整理
  17. sizeof新用法(c++11)
  18. 【视频】ffmpeg mov mp4 m3u8 ts
  19. thinkphp调试
  20. UVaLive 3126 Taxi Cab Scheme (最小路径覆盖)

热门文章

  1. Vue 实例以及生命周期
  2. 洛谷P2888 [USACO07NOV]牛栏Cow Hurdles
  3. Linux下汇编语言学习笔记0 --- 前期准备工作
  4. 静态区间第k大(主席树)
  5. Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
  6. linux 的硬链接与软连接
  7. symfony could not load type &#39;datetime&#39;
  8. 用pc构建DIY计算集群
  9. [React] Prevent Unnecessary Rerenders of Compound Components using React Context
  10. 【Python】python扩展