洛谷 P1494 [国家集训队]小Z的袜子(莫队)
题目链接:https://www.luogu.com.cn/problem/P1494
一道很经典的莫队模板题,然而每道莫队题的大体轮廓都差不多。
首先莫队是一种基于分块的算法,它的显著特点就是:
能在$O(1)$的时间内从$(l,r)$转换到$(l,r-1),(l-1,r),(l+1,r),(l,r+1)$。
然后它的总复杂度在$O(n\times \sqrt{n})$左右。
这道题中除了莫队的应用外,还需要处理一个组合数$(cul)$和一个$gcd$,然后跑莫队即可。
AC代码:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm> using namespace std;
typedef long long ll;
const int N=+; int a[N],vis[N];
int ans1[N],ans2[N];
ll ans;
int block; struct node{
int l,r;
int id;
}q[N]; ll cul(ll x){
return x*(x-)/;
} bool cmp(node aa,node bb){
if(aa.l/block==bb.l/block) return aa.r<bb.r;
return aa.l/block<bb.l/block;
} void add(int pos){
vis[a[pos]]++;
ll m=vis[a[pos]];
ans=ans-cul(m-)+cul(m);
} void del(int pos){
vis[a[pos]]--;
ll m=vis[a[pos]];
ans=ans-cul(m+)+cul(m);
} int gcd(int n,int m){
if(m==) return n;
return gcd(m,n%m);
} int main(){
int n,m;
scanf("%d%d",&n,&m);
block=sqrt(n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
int L=,R=;
for(int i=;i<=m;i++){
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id=i;
}
sort(q+,q+m+,cmp);
for(int i=;i<=m;i++){
while(L<q[i].l){
del(L);
L++;
}
while(L>q[i].l){
L--;
add(L);
}
while(R>q[i].r){
del(R);
R--;
}
while(R<q[i].r){
R++;
add(R);
}
ans1[q[i].id]=ans;
ans2[q[i].id]=cul(q[i].r-q[i].l+);
}
for(int i=;i<=m;i++){
int g=gcd(ans1[i],ans2[i]);
if(ans1[i]==){
printf("0/1\n");
continue;
}
printf("%d/%d\n",ans1[i]/g,ans2[i]/g);
}
return ;
}
AC代码
洛谷 P1494 [国家集训队]小Z的袜子(莫队)的更多相关文章
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- 洛谷 P1494 [国家集训队] 小Z的袜子
题目概述: 小Z把N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务 ...
- 洛谷P1494 [国家集训队]小Z的袜子
Code: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从 ...
- [日常摸鱼]bzoj2038[2009国家集训队]小Z的袜子-莫队算法
今天来学了下莫队-这题应该就是这个算法的出处了 一篇别人的blog:https://www.cnblogs.com/Paul-Guderian/p/6933799.html 题意:一个序列,$m$次询 ...
- P1494 [国家集训队]小Z的袜子
题目 P1494 [国家集训队]小Z的袜子 解析 在区间\([l,r]\)内, 任选两只袜子,有 \[r-l+1\choose2\] \[=\frac{(r-l+1)!}{2!(r-l-1)!}\] ...
- P1494 [国家集训队]小Z的袜子(luogu)
P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线( ...
- luogu P1494 [国家集训队]小Z的袜子 ( 普 通 )
题目: 链接:https://www.luogu.org/problemnew/show/P1494 题意:一些袜子排成一排,每个袜子有固定的颜色. ...
随机推荐
- normalization flow
from Eric Jang Normalizing flows transform simple densities (like Gaussians) into rich complex distr ...
- [转]JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- robotframework常见报错记录
1.'Response' object has no attribute '__getitem__':'Response'对象没有属性' getitem__' response对象的属性r.statu ...
- Jmeter-简介及安装
一.Jmeter简介 Apache Jmeter 是Apache组织的开放源代码项目,是一个纯java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域. Apa ...
- selenium爬去数据+存储
1 爬去数据代码 #coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By fr ...
- ARM(哈弗、冯氏结构、总线和IO访问、处理器状态和处理机模式)
1.哈弗结构与冯氏结构 (1)区别: 是否有独立的存储架构和信号通道. (2)举例: 8086:冯氏结构(相同的存储相同的通道) STM32F103:哈弗结构(不同的存储.通道) 8051:改进的哈弗 ...
- No module named ‘sklearn.model_selection解决办法
在python中运行导入以下模块 from sklearn.model_selection import train_test_split 出现错误: No module named ‘sklear ...
- C语言-防止输入字母
今天群里一位小伙伴问了一个关于scanf函数的问题: scanf("%d", &n); 这个代码怎么防止输入字母? 因为他下面是判断n是否为质数,所以这里肯定有个判断,不然 ...
- C++-Typedef结构体遇上指针
继Typedef遇上结构体数组后,我们又产生了新的疑问. 上一期地址:https://www.cnblogs.com/lemaden/p/10122929.html 昨天一位朋友又问我了,说结构体数组 ...
- Hibernate:Hibernate缓存策略详解
一:为什么使用Hibernate缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...