沉迷于文化的我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的袜子的更多相关文章

  1. AC日记——[国家集训队2010]小Z的袜子 cogs 1775

    [国家集训队2010]小Z的袜子 思路: 传说中的莫队算法(优雅的暴力): 莫队算法是一个离线的区间询问算法: 如果我们知道[l,r], 那么,我们就能O(1)的时间求出(l-1,r),(l+1,r) ...

  2. 洛谷 1775. [国家集训队2010]小Z的袜子

    1775. [国家集训队2010]小Z的袜子 ★★★   输入文件:hose.in   输出文件:hose.out   简单对比时间限制:1 s   内存限制:512 MB [题目描述] 作为一个生活 ...

  3. 数据结构(莫队算法):国家集训队2010 小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...

  4. [国家集训队2010]小Z的袜子

    ★★★   输入文件:hose.in   输出文件:hose.out   简单对比 时间限制:1 s   内存限制:512 MB [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜 ...

  5. 1775. [国家集训队2010]小Z的袜子

    [题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...

  6. 【bzoj2038】[国家集训队2010]小Z的袜子 莫队

    莫队:就是一坨软软的有弹性的东西Duang~Duang~Duang~ 为了防止以左端点为第一关键字以右端点为第二关键字使右端点弹来弹去,所以让左端点所在块为关键字得到O(n1.5)的时间效率,至于分块 ...

  7. 「国家集训队」小Z的袜子

    「国家集训队」小Z的袜子 传送门 莫队板子题. 注意计算答案的时候,由于分子分母都要除以2,所以可以直接约掉,这样在开桶算的时候也方便一些. 参考代码: #include <algorithm& ...

  8. 【BZOJ2038】【2009国家集训队】小Z的袜子(hose) 分块+莫队

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  9. [国家集训队][bzoj2038] 小Z的袜子 [莫队]

    题面: 传送门 思路: 又是一道标准的莫队处理题目,但是这道题需要一点小改动:求个数变成了求概率 我们思考:每次某种颜色从i个增加到i+1个,符合要求的情况多了多少? 原来的总情况数是i*(i-1)/ ...

随机推荐

  1. MyEclipse 智能提示设置

    在实际的开发当中,编译器没有智能提示,确实是效率很低,下面我就给大家讲一下在MyEclipse中设置智能提示,方便大家的开发,希望能帮到大家. 方法一:首先,在MyEclipse的菜单栏中找到wind ...

  2. docker 的简单使用

    运行一个ubuntu容器 咱们要在cenots7操作系统下,以docker下载一个ubuntu image文件,然后以image启动容器 docker pull ubuntu 或者指定版本:docke ...

  3. 数据库启动丢失MSVCP120.dll

    在自己第一次安装数据库的时候发生了很多问题,,首当其冲的就是数据库启动时丢失MSVCP120.dll,这里就不配图了(安装好了才想起来写一篇博客). 为什么安装不了? 这是因为系统缺失必要的运行库导致 ...

  4. September 22nd 2017 Week 38th Friday

    If we believe that tomorrow will be better, we can bear a hardship today. 如果我们相信明天会更好,今天就能承受艰辛. If y ...

  5. November 8th 2016 Week 46th Tuesday

    When he can't, he tries a new way to share a new pair. 当他做不到时,他尝试一种新的方式:分享. To share, your failing e ...

  6. ZT C语言实现字符串倒序

    http://blog.chinaunix.net/uid-20788517-id-34777.html 分类: C/C++ 1 #include <stdio.h>  2 #includ ...

  7. [2018HN省队集训D6T2] girls

    [2018HN省队集训D6T2] girls 题意 给定一张 \(n\) 个点 \(m\) 条边的无向图, 求选三个不同结点并使它们两两不邻接的所有方案的权值和 \(\bmod 2^{64}\) 的值 ...

  8. SAP CX Upscale Commerce : SAP全新推出的电商云平台

    大家好,我是Andy Chen,是SAP成都研究院年轻的SAP CX Upscale Commerce (后面将会以Upscale简称)开发团队的一名产品经理.CX的全称是Customer Exper ...

  9. 关于layui(layer)子页面获取不到父页面jQuery对象的问题。

    如果在使用layui-layer模块过程中,在子页面执行代码: window.parent.$("#id").val() 报错:window.parent.$ is not a f ...

  10. python第二十五课——闭包

    满足闭包的三个条件: 1).有外部函数和内部函数这样的结构 2).外部函数中定义的变量被内部函数所使用 3).内部函数对象作为返回值被外部函数返回 演示闭包的定义和使用: def outer(): a ...