莫队算法 [国家集训队]小Z的袜子
题目链接 洛古 https://www.luogu.org/problemnew/show/P1494
大概说下自己的理解
先来概率的计算公式 ∑C(2,f(i)) / C(2,r−l+1) f(i)是区间每种颜色袜子的数目
最后推出来的式子是 ∑f(i)*f(i)-(r−l+1)/ C(2,r−l+1) (我也不知道怎么推的.......别人给的);
单纯的暴力就不说了 o(n*n*n);
说下和 o(n*n) 的;
莫队是 o(n*sqrt(n));
o(n*n)的算法 有两种 一是[l,r] 区间里用个小技巧 从头扫到尾 一开始ans=10;
看到第一个 1 我们+0; 看到第二个 1 我们+1; -0;第三1; +3;-1;
每次都 ans1=ans1-sum[a[j]]*(sum[a[j]]-1); sum[a[j]]++; ans1=ans1+sum[a[j]]*(sum[a[j]]-1); 莫队也有这个技巧
第二种是区间转移 从[a,b] 到[p, q] a-〉p b-q; 按照预先的排序 稍微 比o(n*n) 小一点;
莫队算法
每次区间转移都可能转移 n个数
莫队把(1-n) 分成sqrt块 每块转移 在每块里 最多 sqrt(n)+n 所以最后 sqrt(n)*(n+sqrt(n));
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e4+;
int n,m,unit,ans;
int col[maxn],be[maxn],sum[maxn];
struct Mo { int l,r,ID,A,B; }q[maxn];
int S(int x) {return x*x; }
bool cmp(Mo a,Mo b){return be[a.l]==be[b.l]?a.r<b.r:a.l<b.l;}
bool CMP(Mo a,Mo b){return a.ID<b.ID;}
void revise(int x,int add)
{
ans-=S(sum[col[x]]);
sum[col[x]]+=add;
ans+=S(sum[col[x]]);
}
int32_t main()
{
cin>>n>>m; unit=sqrt(n);
for(int i=;i<=n;i++) cin>>col[i],be[i]=i/unit+;
for(int i=;i<=m;i++) cin>>q[i].l>>q[i].r,q[i].ID=i;
sort(q+,q+m+,cmp);
int l=;
int r=;
for(int i=;i<=m;i++)
{
// cout<<q[i].l<<" "<<q[i].r<<endl;
while(l<q[i].l)revise(l,-),l++;
while(l>q[i].l)revise(l-,),l--;
while(r<q[i].r)revise(r+,),r++;
while(r>q[i].r)revise(r,-),r--;
if(q[i].l==q[i].r){q[i].A=;q[i].B=;continue;}
q[i].A=ans-(q[i].r-q[i].l+);
q[i].B=(q[i].r-q[i].l+)*(q[i].r-q[i].l);
int c=__gcd(q[i].A,q[i].B); q[i].A=q[i].A/c; q[i].B=q[i].B/c;
}
sort(q+,q+m+,CMP);
for(int i=;i<=m;i++) printf("%lld/%lld\n",q[i].A,q[i].B);
return ;
}
莫队算法 [国家集训队]小Z的袜子的更多相关文章
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- 莫队算法 2038: [2009国家集训队]小Z的袜子(hose)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 3577 Solved: 1652[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...
- kyeremal-bzoj2038-[2009国家集训队]-小z的袜子(hose)-莫队算法
id=2038">bzoj2038-[2009国家集训队]-小z的袜子(hose) F.A.Qs Home Discuss ProblemSet Status Ranklist Con ...
- [BZOJ2038] [2009国家集训队]小Z的袜子(hose) 莫队算法练习
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 10299 Solved: 4685[Sub ...
- 莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)
题目传送门 /* 莫队算法:求出[l, r]上取出两只相同袜子的个数. 莫队算法是离线处理一类区间不修改查询类问题的算法.如果你知道了[L,R]的答案,可以在O(1)的时间下得到 [L,R-1]和[L ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
随机推荐
- 逆袭之旅DAY17.东软实训.Oracle.存储过程
2018-07-13 09:08:36
- Win10系列:JavaScript获取文件和文件夹列表
在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...
- JAVA项目之苹果IAP内购JAVA服务器验证流程详解
1.前言 本博客是经历过多个项目检验的, 绝对真实, 适应于对苹果iap内购稍微有些了解的JAVA开发人员, 认真看, 定能完美解决苹果内购问题. 苹果IAP内购支付实际上是"将客户端支 ...
- WPF技术实现控件截图
1.http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html 2.http://www.silverlightchina.net/ ...
- 修改placeholder的值---input-placeholder
input-placeholder .box::input-placeholder 目前所有的浏览器都要加前缀 .box::-webkit-input-placeholder{ color: agba ...
- poj3261
题解: 同bzoj1717 代码: #include<bits/stdc++.h> using namespace std; ,P2=,P=; int a1[P],num[P],a2[P] ...
- 如何使用VSTO自动将Excel中的图表复制到Word
如何使用VSTO自动将Excel中的图表复制到Word 原文地址:https://code.msdn.microsoft.com/How-to-copy-Chart-in-Excel-a29f9029 ...
- Spring Boot学习笔记----POI(Excel导入导出)
业务:动态生成模板导出Excel,用户修改完再导入Excel. Spring boot + bootstrap + poi 1.添加Dependence <dependency> < ...
- matlab中文本文件与图像转化
一 将图片转化为txt文本文件 a=imread('picture.bmp'); //读取picture.bmp图片 b=rgb2gray(a); //由rgb图 ...
- 201621123001 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集 异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出 ...