BZOJ2038:[2009国家集训队]小Z的袜子
浅谈莫队:https://www.cnblogs.com/AKMer/p/10374756.html
题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=2038
首先答案肯定是\(\frac{\sum cnt_i*(cnt_i-1)}{r-l+1}\),\(cnt_i\)表示第\(i\)种颜色的袜子的个数。
所以我们每次移动左右端点的时候,把当前添加或者删去的袜子的颜色的袜子对应的\(cnt_i*(cnt_i-1)\)从答案里面挖掉,然后让\(cnt_i\)加上或者减一,然后再把\(cnt_i*(cnt_i-1)\)加进答案里面去就行了。
时间复杂度:\(O(n\sqrt{n})\)
空间复杂度:\(O(n)\)
代码如下:
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=5e4+5;
ll ans;
int n,m,block;
int a[maxn],cnt[maxn],bel[maxn];
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct query {
ll res;
int l,r,id;
bool operator<(const query &a)const {
if(bel[l]!=bel[a.l])return bel[l]<bel[a.l];
if(bel[l]&1)return r<a.r;return r>a.r;
}
}q[maxn];
void change(int col,int v) {
if(cnt[col])ans-=1ll*cnt[col]*(cnt[col]-1);
cnt[col]+=v;
if(cnt[col])ans+=1ll*cnt[col]*(cnt[col]-1);
}
bool cmp(query a,query b) {
return a.id<b.id;
}
ll gcd(ll a,ll b) {
if(!b)return a;
return gcd(b,a%b);
}
int main() {
n=read(),m=read(),block=sqrt(n);
for(int i=1;i<=n;i++)
a[i]=read(),bel[i]=(i-1)/block+1;
for(int i=1;i<=m;i++)
q[i].l=read(),q[i].r=read(),q[i].id=i;
sort(q+1,q+m+1);
int nowl=1,nowr=0;
for(int i=1;i<=m;i++) {
while(nowl<q[i].l)change(a[nowl++],-1);
while(nowl>q[i].l)change(a[--nowl],1);
while(nowr<q[i].r)change(a[++nowr],1);
while(nowr>q[i].r)change(a[nowr--],-1);
q[i].res=ans;
}
sort(q+1,q+m+1,cmp);
for(int i=1;i<=m;i++) {
if(q[i].l==q[i].r) puts("0/1");
else {
ll a=q[i].res,b=1ll*(q[i].r-q[i].l+1)*(q[i].r-q[i].l);
ll g=gcd(a,b);a/=g,b/=g;
printf("%lld/%lld\n",a,b);
}
}
return 0;
}
BZOJ2038:[2009国家集训队]小Z的袜子的更多相关文章
- BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】
BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 3577 Solved: 1652[Subm ...
- [BZOJ2038] [2009国家集训队]小Z的袜子(hose) 莫队算法练习
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 10299 Solved: 4685[Sub ...
- [bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队
小Z的袜子 hose 2009-国家集训队 bzoj-2038 题目大意:给定一个n个袜子的序列,每个袜子有一个颜色.m次询问:每次询问一段区间中每种颜色袜子个数的平方和. 注释:$1\le n,m\ ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose)
Time Limit: 20 Sec Memory Limit: 259 MB Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天, ...
- bzoj2038: [2009国家集训队]小Z的袜子(hose) [莫队]
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- BZOJ2038[2009国家集训队]小Z的袜子(hose)——莫队
题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号 ...
- BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从 ...
- [bzoj2038] [2009国家集训队]小Z的袜子
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- [BZOJ2038]:[2009国家集训队]小Z的袜子(hose)(离线莫队)
题目传送门 题目描述 作为一个生活散漫的人,小$Z$每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小$Z$把这 ...
随机推荐
- JavaScript笔记02——基本语法(包括函数、对象、数组等)
Doing Math & Logic Conditional & Looping Functions Objects Arrays Doing Math & Logic 1.J ...
- P4299 首都
题目 P4299 首都 做法 这题是动态维护树的重心,连边后找到两棵树的重心拉一条链(性质:新重心在链上),然后暴力爬 要注意: 1.是找重心的过程中要先把旋转标记放下来,因为\(Splay(x)\) ...
- B-树 C++模板类封装(有图有真相)
定义: 一棵m阶B-树是拥有以下性质的多路查找树: 1.非叶子结点的根结点至少拥有两棵子树: 2.每一个非根且非叶子的结点含有k-1个关键字以及k个子树,其中⌈m/2⌉≤k≤m: 3.每一个叶子结点都 ...
- java中如何高效判断数组中是否包含某个特定的值
四种不同方式检查数组是否包含某个值 使用List: public static boolean useList(String[] arr, String targetValue) { return A ...
- 在Linux终端中查看公有IP的方法详解
首先回顾一下一般的查看IP的命令: ifconfigLinux查看IP地址的命令--ifconfigifconfig命令用于查看和更改网络接口的地址和参数 $ifconfig -a lo0: fla ...
- Cisco学习笔记
目录 1. 路由 1.1 静态路由 1.2 动态路由 2. 访问控制列表 2.1 标准访问控制列表 2.2 扩展访问控制列表 2.3 命名访问控制列表 3. VLAN 3.1 基础知识 3.2 配置实 ...
- SpringCloud-分布式配置中心(config)
简介 在分布式文件系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...
- NOI2013
Bless All 其实已经没有什么遗憾了呢 下一篇就是OI 再见吧2333
- 机器学习三剑客之Numpy
Numpy NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效 ...
- Spring Boot入门——邮件发送
1.引入依赖 <!-- mail依赖 --> <dependency> <groupId>org.springframework.boot</groupId& ...