莫队bzoj1878
题目链接: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相关推荐
- BZOJ1878(SDOI2009)[HH的项链]题解--莫队
[链接] bzoj1878 [题目大意] 给你一个序列,让你求一段区间中不同数的个数. [解题报告] 此题可以用莫队算法解,n比较小.(其实也可以用数状数组解,但本蒟蒻很懒就没写了..) #inclu ...
- 【BZOJ1878】【codevs2307】HH的项链,莫队算法
传送门1 传送门2 写在前面:信息课上的莫队练习 思路:比小Z的袜子还要简单些,不过BZOJ上4s的总时限确实把我吓了一跳 注意:种类编号为0-1000000,小心数组越界导致RE 代码: #incl ...
- NBUT 1457 Sona(莫队算法+离散化)
[1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...
- 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 ...
- Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...
- 【莫队算法】bzoj3781 小B的询问
莫队经典. 开个数组维护a[i]出现的次数. 1 #include<cstdio> 2 #include<cmath> 3 #include<algorithm> ...
- bzoj 3339 莫队
题意: 求任意一个区间的SG函数. 想到线段树,但是线段树合并很麻烦. 线段树--分块. 分块的一个应用就是莫队算法. 怎么暴力递推呢? 从一个区间到另一个区间,Ans 取决于 Ans 和 加入和删除 ...
- 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 ...
- 2021HDU多校第一场 zoto(莫队+分块)
题意: 给你一个序列,q次询问,每次询问l-r的区间内数字大小为x-y之间内不重复的个,保证数据所有大小为1e5以内. 思路: 比赛的时候通过调整了一下分块的大小和各种优化,用莫队把题目给卡过去了,实 ...
最新文章
- day 2 基本类型和函数
- python下载安装教程图解-一招解决:各种版本的Python下载安装教程
- UA MATH567 高维统计II 随机向量3 常见的高维随机向量的分布
- 安卓SlidingDrawer
- 【BZOJ2809】【codevs1763】派遣,主席树记录前缀和
- 8. GD32F103C8T6 定时器-输入捕获测频率
- 4k*1芯片 计算机组成,计算机组成原理的大神们能不能帮忙做几道题啊
- web前端顶岗实习总结报告_假期web前端实习报告
- 网站图片优化方法有哪些
- 高版本linux安装gamit,Linux下安装GAMIT10.5
- Iphone手机,调用微信支付JSAPI缺少参数 timeStamp
- pc端支付宝扫码支付
- 博弈DP:PIPI的炸弹
- 深圳租房数据可视化分析【Plotly库绘图】
- arcscene如何制作三维真实场景
- C语言实现高精度减法
- Matlab轮廓线图的绘制
- 华为设备用户接入与认证配置命令
- python的介绍和及基本的使用
- 【华为认证】HCIP-Datacom 2023最新题库