P1494 小Z的袜子
P1494 小Z的袜子
- 莫队板子题,对询问进行排序+分块,从而得到巧妙的复杂度
对于L,R的询问。
设其中颜色为x,y,z的袜子的个数为a,b,c...
那么答案即为 (a*(a-1)/2+b*(b-1)/2+c*(c-1)/2....)/((R-L+1)*(R-L)/2)(a∗(a−1)/2+b∗(b−1)/2+c∗(c−1)/2....)/((R−L+1)∗(R−L)/2)
化简得: (a^2+b^2+c^2+...x^2-(a+b+c+d+.....))/((R-L+1)*(R-L))(a2+b2+c2+...x2−(a+b+c+d+.....))/((R−L+1)∗(R−L))
即: (a^2+b^2+c^2+...x^2-(R-L+1))/((R-L+1)*(R-L))(a2+b2+c2+...x2−(R−L+1))/((R−L+1)∗(R−L))
我们需要解决的一个问题
求一个区间内每种颜色数目的平方和。
- 大佬博客
- 代码:
#include <cstdio>
#include <iostream>
#include <cctype>
#include <algorithm>
#include <cmath>
using namespace std;typedef long long LL;
#define res register int
inline int read()
{int x(0),f(1); char ch;while(!isdigit(ch=getchar())) if(ch=='-') f=-1;while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();return f*x;
}const int N=50005;
struct node{int x,y,z;LL p,q;}a[N];
int pos[N],c[N];
LL cnt[N];
int n,m,block;inline bool cmp1(const node &n1,const node &n2)
{if(pos[n1.x]==pos[n2.x]) return n1.y<n2.y;return n1.x<n2.x;
}
inline bool cmp2(const node &a,const node &b)
{ return a.z<b.z; }inline LL gcd(LL a,LL b) { return b?gcd(b,a%b):a; }LL ans;
inline void update(int i,int d)
{ans-=cnt[c[i]] * cnt[c[i]];cnt[c[i]]+=d;ans+=cnt[c[i]] * cnt[c[i]];
}inline void solve()
{ans=0;int l=1,r=0;for(res i=1 ; i<=m ; ++i){if(a[i].x==a[i].y) {a[i].p=0; a[i].q=1;continue;}for( ; r<a[i].y ; ++r) update(r+1,1);for( ; r>a[i].y ; --r) update(r,-1);for( ; l<a[i].x ; ++l) update(l,-1);for( ; l>a[i].x ; --l) update(l-1,1);LL len=a[i].y-a[i].x+1;a[i].p=ans-len;a[i].q=len*(len-1);LL tmp=gcd(a[i].p,a[i].q);a[i].p/=tmp; a[i].q/=tmp;}
}
int main()
{n=read(); m=read();for(res i=1 ; i<=n ; ++i) c[i]=read();for(res i=1 ; i<=m ; ++i)a[i].x=read(),a[i].y=read(),a[i].z=i;block = sqrt(n);for(res i=1 ; i<=n ; ++i) pos[i]=(i-1)/block+1;sort(a+1,a+m+1,cmp1);solve();sort(a+1,a+m+1,cmp2);for(res i=1 ; i<=m ; ++i)printf("%lld/%lld\n",a[i].p,a[i].q);return 0;
}
转载于:https://www.cnblogs.com/wmq12138/p/10518089.html
P1494 小Z的袜子相关推荐
- P1494 [国家集训队]小Z的袜子
P1494 [国家集训队]小Z的袜子 题意: 有一个长度为 n 的序列c[i] .现在给出 m个询问,每次给出两个数l,r ,从编号在 l 到 r 之间的数中随机选出两个不同的数,求两个数相等的概率. ...
- 洛谷P1494 [国家集训队]小Z的袜子
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- ...
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- (HYSBZ - 2038)小Z的袜子(hose)(莫队)
题目链接:P1494 [国家集训队]小Z的袜子 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目是中文的,我在这就不解释题意了. 这道题目考察的是莫队算法,还是老样子,模板不再多 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 9894 Solved: 4561 [Su ...
- 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门
题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
- BZOJ2038 : [2009国家集训队]小Z的袜子(hose)(莫队算法)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 19269 Solved: 8851 [Sub ...
- 莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)
题目传送门 1 /* 2 莫队算法:求出[l, r]上取出两只相同袜子的个数. 3 莫队算法是离线处理一类区间不修改查询类问题的算法.如果你知道了[L,R]的答案,可以在O(1)的时间下得到 4 [L ...
最新文章
- Html编辑器kindsoft
- 全网最全程序员效率工具及小技巧
- 微信好友特征数据分析及可视化
- linux mail.rc 端口,配置mail.rc 文件并使用mail发送邮件的详细配置
- 在Linux中创建静态库和动态库 (转)
- 一款好的折线图、饼图、柱形图
- 分库分表下极致的优化
- java怎样访问servlet_如何访问URL并从java servlet获取响应?
- 提高程序员职场价值的10大技巧
- JavaScript高阶函数快速入门
- 对象失去焦点时自己动提交数据
- 瑞士科学家造出了撞不坏的无人机丨Science Robitics
- Ubuntu16.04几分钟自动断网问题
- 实现简单的Java内存缓存
- 关于exe应用程序做成Windows服务爬过的坑
- kibana4 分析和搜索仪表板 安装和配置
- Xshell脚本学习
- 打造数字化转型IT生态系统的IT管理方法:IT4IT一瞥
- Unity+Vuforia实现AR图片识别应用
- ffmpeg命令行太多了_ffmpeg每帧请求的位数过多
热门文章
- 这些知名制药跨国企业都实施了SAP系统
- 自动驾驶国家标准将出台,2021年是L3级自动驾驶汽车元年?
- 一文读懂深度学习:这个AI核心技术被美国掌控,很危险
- 「SAP技术」SAP MM 委外加工采购流程里副产品的收货
- 嵌入式视觉领域的机器学习
- 谷歌将AutoML应用于Transformer架构,翻译结果飙升,已开源
- 教你如何运用可视化理解卷积神经网络(CNNs)的指南
- Python 之 Numpy (四)索引
- seq2seq中的beam search算法过程
- 诺奖10年,干细胞领域再突破!华大单细胞技术助力获得人类体外诱导全能干细胞...