【BZOJ2038】小Z的袜子【莫队】
题意
给出包含n个数字的序列,和m个查询。每次查询问区间[l,r]中挑选出两个数字,大小相同的概率为多少。
分析
莫队的入门题吧。代码是非常好写,关键是时间复杂度的证明。O(n*sqrt(n))。我还有点迷糊,等我再做几个题再说···
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath> using namespace std;
typedef long long LL;
const int maxn=+;
int val[maxn],belong[maxn],f[maxn];
int n,m,cnt,block;
LL gcd(LL a,LL b){
if(!b)return a;
return gcd(b,a%b);
} struct Node{
int L,R,id;
bool operator<(const Node& rhs)const{
return belong[L]<belong[rhs.L]||(belong[L]==belong[rhs.L]&&R<rhs.R);
}
LL a,b;
void solve(){
LL r=gcd(a,b);
a/=r,b/=r;
}
}ask[maxn];
int cmp(Node a,Node b){
return a.id<b.id;
}
LL ans;
void update(int p,int addv){
ans=ans+*addv*f[val[p]]+;
f[val[p]]+=addv;
} int main(){
scanf("%d%d",&n,&m);
memset(f,,sizeof(f));
for(int i=;i<=n;i++)
scanf("%d",&val[i]);
block=sqrt(n);
cnt=n/block;
if(n%block)cnt++;
for(int i=;i<=n;i++){
belong[i]=(i-)/block+;
}
for(int i=;i<=m;i++){
scanf("%d%d",&ask[i].L,&ask[i].R);
ask[i].id=i;
} sort(ask+,ask++m);
ans=;
int l=,r=;
for(int i=;i<=m;i++){
if(r<ask[i].R){
for(r=r+;r<ask[i].R;r++){
update(r,);
}
update(r,);
}
if(l>ask[i].L){
for(l=l-;l>ask[i].L;l--){
update(l,);
}
update(l,);
}
if(r>ask[i].R){
for(;r>ask[i].R;r--){
update(r,-);
}
}
if(l<ask[i].L){
for(;l<ask[i].L;l++){
update(l,-);
}
}
if(ask[i].L==ask[i].R){
ask[i].a=,ask[i].b=;
continue;
}
ask[i].a=ans-(ask[i].R-ask[i].L+),ask[i].b=(LL)(ask[i].R-ask[i].L+)*(ask[i].R-ask[i].L);
ask[i].solve();
}
sort(ask+,ask++m,cmp);
for(int i=;i<=m;i++){
printf("%lld/%lld\n",ask[i].a,ask[i].b);
}
return ;
}
【BZOJ2038】小Z的袜子【莫队】的更多相关文章
- BZOJ2038 小Z的袜子 莫队
BZOJ2038 题意:q(5000)次询问,问在区间中随意取两个值,这两个值恰好相同的概率是多少?分数表示: 感觉自己复述的题意极度抽象,还是原题意有趣(逃: 思路:设在L到R这个区间中,x这个值得 ...
- [国家集训队][bzoj2038] 小Z的袜子 [莫队]
题面: 传送门 思路: 又是一道标准的莫队处理题目,但是这道题需要一点小改动:求个数变成了求概率 我们思考:每次某种颜色从i个增加到i+1个,符合要求的情况多了多少? 原来的总情况数是i*(i-1)/ ...
- 【填坑向】bzoj2038小Z的袜子 莫队
学莫队必做题,,,但是懒得写.今天来填个坑 莫队水题 莫队实际上就是按一个玄学顺序来离线计算询问,保证复杂度只会多一个n1/2,感觉是玄学(离线算法都很玄学) 易错点:要开long long(卡我半天 ...
- BZOJ2038 小Z的袜子(莫队之源)
题意+思路: 给你m个区间询问,问每个区间内的$\displaystyle \frac{\sum x^2-(R-L+1)}{(R-L)(R-L+1)} $,其中x为每种数字的个数,用cnt存储: 所以 ...
- 小Z的袜子 & 莫队
莫队学习 & 小Z的袜子 引入 莫队 由莫涛巨佬提出,是一种离线算法 运用广泛 可以解决广大的离线区间询问题 莫队的历史 早在mt巨佬提出莫队之前 类似莫队的算法和莫队的思想已在Codefor ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- 【国家集训队2010】小Z的袜子[莫队算法]
[莫队算法][国家集训队2010]小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程, ...
- bzoj 2308 小Z的袜子(莫队算法)
小Z的袜子 [题目链接]小Z的袜子 [题目类型]莫队算法 &题解: 莫队算法第一题吧,建议先看这个理解算法,之后在参考这个就可以写出简洁的代码 我的比第2个少了一次sort,他的跑了1600m ...
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从 ...
随机推荐
- Python中super()和__init__()方法
采用新式类,要求最顶层的父类一定要继承于object,这样就可以利用super()函数来调用父类的init()等函数, 每个父类都执行且执行一次,并不会出现重复调用的情况.而且在子类的实现中,不用到处 ...
- vue踩坑记录
一.element resetFields 方法报错 网上查的解决方案 resetForm(formName) { this.$nextTick(() => { this.$refs[formN ...
- apache phoenix 安装试用
备注: 本次安装是在hbase docker 镜像的基础上配置的,主要是为了方便学习,而hbase搭建有觉得 有点费事,用镜像简单. 1. hbase 镜像 docker pull har ...
- Navicat Premium 连接Oracle 出现ora-12505 错误解决方案
找到listener.ora文件:我的Oracle是安装在F盘, 路径为:F:\oracle\product\10.2.0\db_1\network\admin\listener.ora 改动前的配 ...
- 搭建基于hyperledger fabric的联盟社区(七) --升级chaincode
上个版本的chaincode有很多功能不完备,所以要部署新版本的chaincode.Fabric支持在保留现有状态的前提对chaincode进行升级. 一.新版chaincode 新版本的chainc ...
- 默认库“library”与其他库的使用冲突;使用 /NODEFAULTLIB:library
您试图与不兼容的库链接. 重要事项 运行时库现在包含防止混合不同类型的指令.如果试图在同一个程序中使用不同类型的运行时库或使用调试和非调试版本的运行时库,则将收到此警告.例如,如果编译一个文件以使用一 ...
- MUI 支付宝支付接入
沙箱测试地址:https://openhome.alipay.com/platform/appDaily.htm 1资源下载地址:https://docs.open.alipay.com/54/106 ...
- 【转】JMeter 通过 JDBC 访问 Oracle 和 MySQL
JMeter 的手册中描述了如何访问 MySQL,但是没有说明如何访问 Oracle.对于没有 Java 应用开发经验和对 Oracle 不是特别熟悉的朋友,可以参考这篇文章来简单.快速的配置好 JM ...
- (转)python virtual_env 的使用 + 将原来的虚拟环境部署到新环境
原文链接: https://blog.csdn.net/poxiaonie/article/details/78820015
- PyQt 5事件和信号
信号槽Signals & slots sld.valueChanged.connect(lcd.display) # 将滚动条的valueChanged信号连接到lcd的display插槽 # ...