bzoj1878/洛谷1972 [SDOI2009]HH的项链

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

这题想着用线段树对于我这个蒟蒻来说太难了啊。。

然后看了题解知道是莫队算法。。貌似还有一个【小Z的袜子】这么一个例题

实际上我觉得这题比较容易入门吧

莫队算法就是优化之后的暴力,离线处理区间问题

通过分块把区间进行排序,然后枚举区间,只要知道[L,R]中的ans,那么就可以得出[L+1,R],[L,R+1],[L,R-1],[L-1,R]的ans,不过我们可以直接通过两个下标来进行对区间的求解

这是没有修改的莫队算法

带修改的还没来得及看~

一般来说只要满足询问区间内相同元素的个数都可以用莫队算法,【小Z的袜子】的话需要转换一下,顺便就看了一下

直接上代码吧:

//Decision's template
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#include<string>
#include<cmath>
#include<map>
#include<set>
using namespace std;

#define DP_maxn 16
#define maxn 1000000+10
#define INF 10000007
#define mod 1000000007
#define mst(s,k) memset(s,k,sizeof(s))

typedef long long ll;

struct Edge{
    int from,to,dist;
    Edge(int u,int v,int d):from(u),to(v),dist(d){}
};

/*-------------------------------template End--------------------------------*/

int pl = 500;

struct node{
	int l,r,id;
	
	bool operator < (const node &a) const{
		return (l/pl==a.l/pl)?(r<a.r):(l/pl<a.l/pl);
	}
};

int n,m,l = 1,r = 0;
int tid[maxn];
int ans[maxn],ansd[maxn],num[maxn];
node all[maxn];
ll sum = 0;

void add(int x)
{
	num[x]++;
	if(num[x]==1) sum++;
}

void del(int x)
{
	num[x]--;
	if(num[x]==0) sum--;
}

int main()
{
    //freopen("std.in","r",stdin);
    //freopen("std.out","w",stdout);
    scanf("%d",&n);
    for(int i = 1;i<=n;i++) cin>>tid[i];
    scanf("%d",&m);
    for(int i = 1;i<=m;i++)
    {
		scanf("%d %d",&all[i].l,&all[i].r);
		all[i].id = i;
	}
	sort(all+1,all+1+m);
	mst(num,0);
	for(int i = 1;i<=m;i++)
	{
		while(r<all[i].r)
		{
			r++;
			add(tid[r]);
		}
		while(r>all[i].r)
		{
			del(tid[r]);
			r--;
		}
		while(l<all[i].l)
		{
			del(tid[l]);
			l++;
		}
		while(l>all[i].l)
		{
			l--;
			add(tid[l]);
		}
		ans[all[i].id] = sum;
		
	}
	for(int i = 1;i<=m;i++) printf("%d\n",ans[i]);
	return 0;
}


Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍 目录Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍一、简单介绍二、Mask 实现的遮罩效果三、Soft Mask 实现遮罩效果四、 Soft Mask 的一些设置五、插件下载Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。 阅读详情

相关推荐

DeepLens是一个用于计算镜头设计的可微光线追踪器

若安装过程中遇到网络问题导致安装失败,可尝试更换pip源,例如使用国内的镜像源,修改pip配置文件(Windows系统在。

max500600的博客 1100

bzoj1878】【洛谷P1972】【SDOI2009HH项链

题目描述HH 有一串由各种漂亮的贝壳组成的项链HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答……因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。输入输出格式输入格式:第一行:一个整数N,表示项链

infinity_edge的博客 625

Claude桌面端安装失败?Retrying无限重试终极解决方案(亲测有效)

Claude桌面端安装卡在Retrying并非网络问题,而是安装器下载源异常导致。本文提供已验证方案:一条命令即可解决问题🚀

XiaoqiangClub的博客 2182

洛谷P1972 [SDOI2009]HH项链BZOJ1878

莫队

forezxl的博客 514

[SDOI2009]HH项链

【题目链接】 洛谷 P1972 [SDOI2009]HH项链 BZOJ 1878: [SDOI2009]HH项链 【解析】 莫队。。。 然而 BIT 也可以。 仍然是离线,将查询排序。 记录下每种颜色的最靠前的位置以及每个位置后同种颜色出现的下一个位置。 用一个指针扫描每个位置,更新其下一位置的贡献。 总复杂度 O(N log N) 【代码】 #include&lt;...

又又大柚纸的博客 208

洛谷 P1972 BZOJ 1878 [SDOI2009]HH项链

题目描述 HH 有一串由各种漂亮的贝壳组成的项链HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答……因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。 输入输出格式 输入格式: 第一行...

weixin_30886233的博客 138

BZOJ 1878 SDOI2009 HH项链 树状数组/莫队算法

题目大意:给定一个序列,求一个区间内有多少个不同的数 正解是树状数组 将所有区间按照左端点排序 然后每次只统计左端点开始的每种颜色的第一个数就行了 用树状数组维护 我写的是莫队算法 莫队明显能搞 m√m明显慢了点但是还是能接受的一个复杂度 一开始离散化数组开小了各种秒RE…… 跪了 #include #include #include #include #include #define M

世界 2112

BZOJ1878&&洛谷洛谷P1972[SDOI2009]HH项链

真是麻了袋了,洛谷主席树能过BZ的TLE了,BZ的莫队能过洛谷TLE了 真是stm啊  主席树做法 莫队做法 //By AcerMo #include&lt;cmath&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;iostream&gt; #include&lt;algorithm&gt; using nam...

AcerMoOi之路 432

[Luogu P1972] [BZOJ 1878] [SDOI2009]HH项链

洛谷传送门 BZOJ传送门 题目描述 HH 有一串由各种漂亮的贝壳组成的项链HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答……因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。 ...

LPA的博客 247

洛谷P1972&&BZOJ1878[SDOI2009]HH项链

主席树的练手好题,中文题面不再赘述对于这一道题,我们首先可以有一个很直观的做法:对于询问区间[i,j],直接用[i,j]减去重复颜色的数量。那么我们如何计算重复颜色的数量呢?对于第i个贝壳,我们设其颜色是col[i],重复就是在第i次之前也被计算了,我们在这里就仅仅考虑维护一个last[i]表示第i个贝壳的颜色上一次出现的位置,然后把第last[i]的位置在线段树中+1,设sum[i][j]=线段...

AcerMoOi之路 529

Ansys Q3D电容提取精度控制全指南

电容提取是高速电路信号完整性分析的基础电磁建模任务,其本质是通过边界元法求解导体表面电荷分布,进而构建物理可解释的电容矩阵。精度受几何等效性、参考地平面设置、端口定义及材料参数影响显著,尤其在封装级互连与DDR5通道建模中,±3%误差阈值倒逼工程师深入理解Q3D底层求解逻辑。Ansys Q3D并非黑箱工具,而是需校准的高精度电磁测量平台——从边缘场修正、介质各向异性逼近,到Surface Impedance引入趋肤效应,每项设置都对应明确的物理意义与工程权衡。本文聚焦实际项目中最易失准的四大环节,提供可复用

weixin_34026276的博客 272

Codevs 2307[SDOI2009]HH项链

同题: Codevs 2307 HH项链 BZOJ 1878 HH项链 洛谷 1972 HH项链 2009年省队选拔赛山东 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描...

weixin_33937913的博客 109

NOIP2012复赛day1 Vigenère密码 简单的一题

noip2012年复赛题,字符串的处理,随便做一做 直接贴代码,不说其他的~ #include #include #include #include using namespace std; char ki[100+10],C[1000+10]; queue M; char bts(char c) { char c1='a'+(c-'A'); return c1; } char stb(

Dream of Decision 780

洛谷 P1262|P2341|P2002 强连通分量,缩点

图论强连通分量算法,个人感觉tarjan相比两次dfs好写一点(个人看法) 这三道题都在学了强连通分量算法之后都比较基础,貌似都要判断一下缩点之后每个点的入度? P1262 间谍网络 题意: 直接复制一下数据的输入格式这里,还是比较好理解的吧 第一行只有一个整数n。 第二行是整数p。表示愿意被收买的人数,1≤p≤n。 接下来的p行,每行有两个整数,第一个数是一个愿意被收买的间谍的编号

Dream of Decision 678

UVa1594 Ducci Sequence Ducci序列(习题5-2)

这道题一开始还以为很难,后来思路通了之后发现自己真的想的太多了,很简单,直接判断是否存在ZERO的情况,如果在遍历数次之后不存在,则输出ZERO,一开始提交的时候忘记修改调试数据,把循环次数写成20次,改成1000次后直接AC。 原题参考:UVa1594  Ducci Sequence 思路:一个不定长数组,储存现在的数组,一个整数变量储存数组第一位(便于计算数组最后一位),然后把当前数组

Dream of Decision 662

UVa 1593 Allgnment of Code代码对齐( 习题5-1)

#include #include #include #include #include #include #include using namespace std; vector word_line[1024]; string line; int thelong[108]; int main() { freopen("1593.in","r",stdin); f

Dream of Decision 596

UVa1225 Digit Counting 数数字

代码: #include int c[10000][10]; int main() { int i, k, t, n; for (i = 1; i < 10000; ++i) { for (k = i; k; k /= 10) ++c[i][k % 10]; for (; k < 10;

Dream of Decision 541

UVa 12100 Printer Queue(习题5-7)

题目的大概也就是一个队列,如果一个任务之后有优先级更高的,那么把这个任务放在最后,否则打印,打印花一分钟时间。 思路:通过队列(queue)模拟,使用映射(map)来表示任务的编号,然后用一个不定长数组(vector)来储存优先级队列,如果队列中的映射满足等于第一个,那么就打印。 做这个题目的时候思路是比较混乱的,但是后来写出来就比较清楚了,在UVa上出现了WA,才发现是一开始for循环在测试

Dream of Decision 510

bzoj1101/洛谷P3455 [POI2007]ZAP-Queries

之前看了但是没有理解的莫比乌斯函数现在找题目练练手。。。寒假里面看的当时理解不了就没有多管,导致现在写预处理函数很懵逼。。题意:给定n,m,d,求出1最简单的方法,O(n²)的暴力枚举就不用说了,但是这个数据范围肯定是过不了的。。那么我们设函数f(d)为使得gcd(x,y)=d的x,y的对数设函数F(d)为d可以整除gcd(x,y)的情况那么显然有(仔细想一下或者手玩一下)则反演之后就是 那么我们

Dream of Decision 470

【模板】Trie树模板

Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。 上面是百度百科找的,trie树=字典树=前缀树,下面就说说前缀树的实现。 首先trie树的根必定是一个空节点,每一条边代表了一个字符,每一个节点有多种可能,那么我们可以使用一个数组来达到这个目的; 同时,每一个单词(字符串)的最

Dream of Decision 469

洛谷P2602|bzoj1833 [ZJOI2010]数字计数 数位dp

数位dp先预处理啊,然后xjb乱搞一下啊 好吧其实我还是看了一下题解。。一开始弄错了统计的方法。。于是疯狂wa 有关数位dp的文章的话,传送门:http://blog.csdn.net/wust_zzwh/article/details/52100392,当然是这位大犇写的了%%%%(虽然百度也可以找到) 题解(有抄题解嫌疑的我): //Decision's template #inclu

Dream of Decision 469

Permutation全排列算法

洛谷上看到的一个题,求1-n的全排列,虽然看着挺简单,但是最后还是觉得比较绕脑, 思路:一个数组保持已经排列的数,然后用一个函数检测是否已经排过,只需要检测当前排列的数位置前面的数组是否已经出现就行了 代码: #include #include using namespace std; int maxn,tmp[20],all[550000][15],ans=0; bool seach(

Dream of Decision 447
上一篇: 洛谷 P3389 【模板】高斯消元法
下一篇: UVa 201 Squares (习题4-2)
Decision2016
博客等级 码龄10年 3粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值