cogs1772 [国家集训队2010]小Z的袜子
沉迷于文化的我N年没更blog了。。。(\(N \in (0,1)\))
然后回到机房就沉迷于 \(generals.io\) 无法自拔。。。QAQ
然后想打一遍splay(然后是LCT),然后放弃了。。。QAQ
只好学一学\(Brother Zi Duck\)巨佬早学过的莫队辣
%%%GZY
hzwer说的很清楚了qwq以下复述一遍
先蒯一点:
如果我们已知[l,r]的答案,能在O(1)时间得到[l+1,r]的答案以及[l,r-1]的答案,即可使用莫队算法。时间复杂度为O(n1.5)。如果只能在logn的时间移动区间,则时间复杂度是O(n1.5*log n)。
将这\(n\)个数分成\(s(s=\lfloor \sqrt{n} \rfloor)\)块,第i个在pos[i]块。
然后把询问区间按照pos[l]第一关键字,r第二关键字排序。均递增
然后每次暴力转移
为啥复杂度是对的呢???
首先n,m同阶,n=m。
有这样几种转移
块内转移:每块r是递增的,一块的所有转移r是O(n),l的转移是O(n0.5)。有n0.5块,所以所有r的转移复杂度是O(n1.5),l最多转移m次,复杂度也是O(n1.5)。
一块到下一块的转移:O(n),这样的转移只有O(n0.5)次,复杂度还是O(n1.5)。
所以复杂度就是O(n^1.5)
orz gzy
orz hzwer
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cctype>
using namespace std;
#define il inline
#define vd void
#define rg register
#define int long long
il int gi(){
rg int x=0;rg bool flg=0;rg char ch=getchar();
while(!isdigit(ch)){if(ch=='-')flg=1;ch=getchar();}
while(isdigit(ch))x=x*10-'0'+ch,ch=getchar();
return flg?-x:x;
}
const int maxn=50001,maxm=maxn;
int c[maxn];
struct qq{int l,r,id,ans;}s[maxm];
int n,m,qt,pos[maxn],ans,tot[maxn];
il bool cmp(const qq&a,const qq&b){return (pos[a.l]^pos[b.l])?pos[a.l]<pos[b.l]:a.r<b.r;}
il bool cmp_(const qq&a,const qq&b){return a.id<b.id;}
il int sqr(const int&a){return a*(a-1);}
il int gcd(const int&a,int b){return b?gcd(b,a%b):a;}
main(){
freopen("hose.in","r",stdin);
freopen("hose.out","w",stdout);
n=gi(),m=gi(),qt=sqrt(n);
for(rg int i=1;i<=n;++i)pos[i]=(i-1)/qt+1;
for(rg int i=1;i<=n;++i)c[i]=gi();
for(rg int i=1;i<=m;++i)s[i].l=gi(),s[i].r=gi(),s[i].id=i;
sort(s+1,s+m+1,cmp);
s[0].l=s[0].r=1;tot[c[1]]=1;
for(rg int i=1,j;i<=m;++i){
for(j=s[i-1].l-1;j>=s[i].l;--j)ans-=sqr(tot[c[j]]),++tot[c[j]],ans+=sqr(tot[c[j]]);
for(j=s[i-1].r+1;j<=s[i].r;++j)ans-=sqr(tot[c[j]]),++tot[c[j]],ans+=sqr(tot[c[j]]);
for(j=s[i-1].l;j<s[i].l;++j)ans-=sqr(tot[c[j]]),--tot[c[j]],ans+=sqr(tot[c[j]]);
for(j=s[i-1].r;j>s[i].r;--j)ans-=sqr(tot[c[j]]),--tot[c[j]],ans+=sqr(tot[c[j]]);
s[i].ans=ans;
}
sort(s+1,s+m+1,cmp_);
int a,b,_gcd;
for(rg int i=1;i<=m;++i){
a=s[i].ans,b=(s[i].r-s[i].l+1)*(s[i].r-s[i].l);
_gcd=gcd(a,b);
printf("%lld/%lld\n",a/_gcd,b/_gcd);
}
return 0;
}
cogs1772 [国家集训队2010]小Z的袜子的更多相关文章
- AC日记——[国家集训队2010]小Z的袜子 cogs 1775
[国家集训队2010]小Z的袜子 思路: 传说中的莫队算法(优雅的暴力): 莫队算法是一个离线的区间询问算法: 如果我们知道[l,r], 那么,我们就能O(1)的时间求出(l-1,r),(l+1,r) ...
- 洛谷 1775. [国家集训队2010]小Z的袜子
1775. [国家集训队2010]小Z的袜子 ★★★ 输入文件:hose.in 输出文件:hose.out 简单对比时间限制:1 s 内存限制:512 MB [题目描述] 作为一个生活 ...
- 数据结构(莫队算法):国家集训队2010 小Z的袜子
[题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...
- [国家集训队2010]小Z的袜子
★★★ 输入文件:hose.in 输出文件:hose.out 简单对比 时间限制:1 s 内存限制:512 MB [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜 ...
- 1775. [国家集训队2010]小Z的袜子
[题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...
- 【bzoj2038】[国家集训队2010]小Z的袜子 莫队
莫队:就是一坨软软的有弹性的东西Duang~Duang~Duang~ 为了防止以左端点为第一关键字以右端点为第二关键字使右端点弹来弹去,所以让左端点所在块为关键字得到O(n1.5)的时间效率,至于分块 ...
- 「国家集训队」小Z的袜子
「国家集训队」小Z的袜子 传送门 莫队板子题. 注意计算答案的时候,由于分子分母都要除以2,所以可以直接约掉,这样在开桶算的时候也方便一些. 参考代码: #include <algorithm& ...
- 【BZOJ2038】【2009国家集训队】小Z的袜子(hose) 分块+莫队
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- [国家集训队][bzoj2038] 小Z的袜子 [莫队]
题面: 传送门 思路: 又是一道标准的莫队处理题目,但是这道题需要一点小改动:求个数变成了求概率 我们思考:每次某种颜色从i个增加到i+1个,符合要求的情况多了多少? 原来的总情况数是i*(i-1)/ ...
随机推荐
- Dos命令删除添加新服务
安装服务sc create Svnservice binpath= "d:\subversion\bin\svnserve.exe --service -r E:\projectversio ...
- Java——并发编程
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
- Linux 系统的目录结构_【all】
Linux系统的目录结构 /:最大根目录,存放系统程序 /etc: 加载配置文件好服务启动命令,系统配置文件 /etc/exports /etc/hosts /bin:binaries 存放命令 /s ...
- Microsoft Teams 版本与语音落地介绍
我亲爱的小伙伴们,失踪人口回归啦~~ 今天和大家聊的是Microsoft Teams,Teams作为协作的集大成者,可以实现skype for Business的所有功能,还可以在teams里集合Of ...
- mysql常见问题总结
061 如何删除表? 答案:运行命令 drop table table_name; 062 创建索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成 ...
- ZT Android4.2蓝牙基础架构学习
Android4.2蓝牙基础架构学习 分类: Jellybean Bluetooth Bluetooth 2013-10-13 23:58 863人阅读 评论(3) 收藏 举报 androidblue ...
- Promise & Deferred Objects in JavaScript Pt.2: in Practice
原文:http://blog.mediumequalsmessage.com/promise-deferred-objects-in-javascript-pt2-practical-use Intr ...
- 20165318 2017-2018-2 《Java程序设计》第一周学习总结
20165318 2017-2018-2 <Java程序设计>第一周学习总结 教材内容学习总结 第一章主要对Java平台进行了简单的介绍,并讲解了如何搭建Java环境. Java平台概论 ...
- Data Binding Android - Type parameter T has incompatible upper bounds : ViewDataBinding and MainAct
Go to your "some_layout.xml" Click right -> Refactor -> Rename (or SHIFT + F6) Renam ...
- 集合之Map总结
在前面LZ详细介绍了HashMap.HashTable.TreeMap的实现方法,从数据结构.实现原理.源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结. ...