[BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)
Description
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……
具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。
你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子。当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以方便自己选择。
Solution
把询问按照左端点排序,块内按照右端点排序;
(l,r)的答案转移到(l+1,r)/(l-1,r)/(l,r+1)/(l,r-1)只需要O(1)的时间,所以总的时间复杂度是O(n^1.5)【黄学长blog有时间复杂度的分析 hzwer】
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #define MAXN 50005 typedef long long LL; using namespace std; int n,m,unit,col[MAXN],num[MAXN]; LL ans=0; struct Node{int l,r,id;LL a,b; }q[MAXN]; int Read() {int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; } bool cmp(Node A,Node B) {if(A.l/unit!=B.l/unit)return A.l/unit<B.l/unit;return A.r<B.r; } bool cmp_id(Node A,Node B) {return A.id<B.id; } LL gcd(LL a,LL b) {if(!b)return a;return gcd(b,a%b); } void update(int x,int add) {ans-=num[col[x]]*(num[col[x]]-1);num[col[x]]+=add;ans+=num[col[x]]*(num[col[x]]-1); } void work() {int L=1,R=0;for(int i=0;i<m;i++){while(q[i].l<L)update(L-1,1),L--;while(q[i].l>L)update(L,-1),L++;while(q[i].r<R)update(R,-1),R--;while(q[i].r>R)update(R+1,1),R++;if(q[i].l==q[i].r){q[i].a=0,q[i].b=1;continue;}q[i].a=ans;q[i].b=(LL)(R-L+1)*(R-L);LL k=gcd(q[i].a,q[i].b);q[i].a/=k,q[i].b/=k;} } int main() {n=Read();m=Read();unit=sqrt(n);for(int i=0;i<n;i++)col[i]=Read();for(int i=0;i<m;i++){q[i].l=Read()-1;q[i].r=Read()-1;q[i].id=i;}sort(q,q+m,cmp);work();sort(q,q+m,cmp_id);for(int i=0;i<m;i++){printf("%lld/%lld\n",q[i].a,q[i].b);}return 0; }
转载于:https://www.cnblogs.com/Zars19/p/6681508.html
[BZOJ 2038][2009国家集训队]小Z的袜子(hose)(莫队)相关推荐
- 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门
题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 9894 Solved: 4561 [Su ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块
分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2938 Solved: 13 ...
- 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))
莫队也是暴力的一种,不过可以很有效的降低复杂度 如果我们已知[l, r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l, r-1]的答案,即可使用莫队算法. 时间复杂度为O(n^1.5).如 ...
- bzoj - 2038: [2009国家集训队]小Z的袜子(hose)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 莫队算法可以解决一类不修改.离线查询问题.而这题可以用莫队来做. *我是看这个论文学 ...
- [BZOJ2038] [2009国家集训队] 小Z的袜子(hose) (莫队)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...
- 【bzoj2038】[2009国家集训队]小Z的袜子(hose) 莫队算法
原文地址:http://www.cnblogs.com/GXZlegend/p/6803860.html 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终 ...
- bzoj2038: [2009国家集训队]小Z的袜子(hose) 莫队
Time Limit: 20 Sec Memory Limit: 259 MB Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小 ...
最新文章
- skiller v3 beta2_S10全球总决赛:赛前叫嚣却遭打脸!V3被LGD踢出S10,日本撸友彻底炸锅:真是悲哀...
- 清华大学最新研制的自行车“成精”了!“天机”在全球顶尖期刊“泄露”
- 你说 Arthas 诊断问题不好用?watch 命令了解多少?
- linux 退出服务器_Vue实战091:Vue项目部署到nginx服务器
- 对话行癫:解密阿里云顶层设计和底层逻辑
- Openwrt上配置Aria2迅雷离线下载步骤
- 【转】Linux 静态库与共享库的使用
- mysql导入的excel更新_excel导入数据库,存在则更新不存在添加
- C#LeetCode刷题之#819-最常见的单词(Most Common Word)
- Tree(树分治入门)
- 实现Kubernetes跨集群服务应用的高可用
- Hybrid Astar 算法剖析和实现(五)
- log4j.xml配置文件详解
- 安卓蓝牙BluetoothBLE开发JDY-10M
- 电脑如何打开软键盘,教大家Win10如何打开软键盘的方法
- redis的zset为什么用调表不用红黑树
- HTML5七夕情人节表白网页制作【樱花雨+爱心3D相册】HTML+CSS+JavaScript
- mac创建.开头的文件夹
- 太乐地图下载器5.0.5(破解版)
- 团宝网股权太分散融资难加夫妻店管理诟病
热门文章
- java练习:打印 数字1、2、3、4的组合,不能以4开头,1和3不能相邻,且数字不能重复
- 鸿蒙操作系统在使用了吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- python运维脚本部署jdk_Jenkins自动执行Python脚本,并输出测试报告
- php cc攻击代码,php cc攻击代码与防范方法
- android广播intent原理,Android中BroadcastReceiver详解
- axure怎样24位bmp输出_平衡(非平衡)输入输出的无源变压器前级放大器
- 测试一款CSDN免费下载软件
- 智能车竞赛技术报告 | 智能车视觉 - 温州大学- 春华秋实
- 对比BF245、2SK30A,2SK160A与2SK241对于150kHz导航信号放大关系
- ceph 代码分析 读_Ceph OSD磁盘异常流量问题分析