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

思路:

  传说中的莫队算法(优雅的暴力);

  莫队算法是一个离线的区间询问算法;

  如果我们知道[l,r],

  那么,我们就能O(1)的时间求出(l-1,r),(l+1,r),(l,r-1),(l,r+1);

  莫队算法怎么保证时间呢?

  把询问排序;

  然后进行暴力;

  但是这样仍然需要很长很长的时间;

  所以,我们引入一个根号方法,分块;

  把区间的点分块;

  然后每个询问的l,r按l所属的块为第一关键字,l,r为第二第三;

  排序完后,就可以保证复杂度是O(n*sqrt(n));

  然后再看这个题目本身;

  询问l,r中的同种颜色袜子的概率;

  稍微思考一下便可列出式子:

    a1*(a1-1)+a2*(a2-1)+...+ai*(ai-1)/(r-l+1)*(r-l)

    ai为第i种颜色的个数;

  改变一下就可以得到:

    a1*a1+a2*a2+...+ai*ai-a1-a2-...-ai/(r-l+1)*(r-l)

  因为每种颜色袜子的总个数为r-l+1,所以:

    a1*a1+a2*a2+...+ai*ai-r+l-1/(r-l+1)*(r-l)

来,上代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 50005
#define ll long long struct QueryType {
ll l,r,id;
};
struct QueryType qu[maxn]; ll n,m,col[maxn],ans[maxn],pos=,fa[maxn],num[maxn],bel[maxn],size; inline void in(ll &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} bool cmp(QueryType iposa,QueryType iposb)
{
if(bel[iposa.l]==bel[iposb.l]) return iposa.r<iposb.r;
else return iposa.l<iposb.l;
} inline void updata(ll now,ll dis)
{
now=col[now];
pos-=num[now]*num[now];
num[now]+=dis;
pos+=num[now]*num[now];
} ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
} int main()
{
freopen("hose.in","r",stdin);
freopen("hose.out","w",stdout);
in(n),in(m);size=sqrt(n);
for(ll i=;i<=n;i++) in(col[i]),bel[i]=(i-)/size;
for(ll i=;i<=m;i++) in(qu[i].l),in(qu[i].r),qu[i].id=i;
sort(qu+,qu+m+,cmp);
ll li=,ri=;
for(ll j=;j<=m;j++)
{
if(ri>qu[j].r) for(ll i=ri;i>qu[j].r;i--) updata(i,-);
else for(ll i=ri+;i<=qu[j].r;i++) updata(i,);
if(li>qu[j].l) for(ll i=li-;i>=qu[j].l;i--) updata(i,);
else for(ll i=li;i<qu[j].l;i++) updata(i,-);
ri=qu[j].r,li=qu[j].l,ans[qu[j].id]=pos-(ri-li+);
if(qu[j].r-qu[j].l>=) fa[qu[j].id]=(ri-li+)*(ri-li);
}
for(ll i=;i<=m;i++)
{
if(fa[i]==||ans[i]==)
{
printf("0/1\n");
continue;
}
ll o=gcd(fa[i],ans[i]);
printf("%lld/%lld\n",ans[i]/o,fa[i]/o);
}
return ;
}

AC日记——[国家集训队2010]小Z的袜子 cogs 1775的更多相关文章

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

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

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

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

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

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

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

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

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

    沉迷于文化的我N年没更blog了...(\(N \in (0,1)\)) 然后回到机房就沉迷于 \(generals.io\) 无法自拔...QAQ 然后想打一遍splay(然后是LCT),然后放弃了 ...

  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. AC日记——[国家集训队2011]旅游(宋方睿) cogs 1867

    [国家集训队2011]旅游(宋方睿) 思路: 树链剖分,边权转点权: 线段树维护三个东西,sum,max,min: 当一个区间变成相反数时,sum=-sum,max=-min,min=-max: 来, ...

随机推荐

  1. HDU - 1973 - Prime Path (BFS)

    Prime Path Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. 遗传算法 | Java版GA_TSP (2)

    嗯哼,上一篇博客中用Java实现了遗传算法求解TSP(Java版GA_TSP(我的第一个Java程序)),但明显求解效果不太好,都没太好意思贴出具体的结果,今天捣腾了下,对算法做了一些小改进,求解效果 ...

  3. Python 交互模式中 Delete/Backspace 键乱码问题

    进入 Python 交互模式,按下 Delete/Backspace 键,会出现 ^H 字符 解决方式: 1. 进到 Python 的Modules目录 [root@cyt-test Python-2 ...

  4. 矩阵儿快速幂 - POJ 3233 矩阵力量系列

    不要管上面的标题的bug 那是幂的意思,不是力量... POJ 3233 Matrix Power Series 描述 Given a n × n matrix A and a positive in ...

  5. ASP.NET下调用ffmpeg与mencoder实现视频转换截屏

    最近要做一个视频播放的系统,用到了ffmpeg和mencoder两个工具,查了一些资料,发现这方面的资料还挺多的,但是就是乱了一点,我自己从头整理了一下,和大家分享一下: 1.ffmpeg实现视频(a ...

  6. leetcode 【 Merge k Sorted Lists 】python 实现

    题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...

  7. MFC深入浅出读书笔记第二部分2

    第七章  MFC骨干程序 所谓骨干程序就是指有AppWizard生成的MFC程序.如下图的层次关系是程序中常用的几个类,一定要熟记于心. 1 Document/View应用程序 CDocument存放 ...

  8. 使用 Spirit 类在 XNA 中创建游戏中的基本单位精灵(十三)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  9. 对CRC32的小结加上bugku一道题目:好多压缩包

    CRC32就是校验值,一般来说不同的文件校验值不一样,所以我们可以挨个爆破,当然这是在文件比较小的时候.下面是几种情形. 1. 我新建了一个flag.txt文档,里面是我的生日20180818 然后我 ...

  10. 【bzoj4059】[Cerc2012]Non-boring sequences 分治

    题目描述 我们害怕把这道题题面搞得太无聊了,所以我们决定让这题超短.一个序列被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的数字,即每个子序列里至少存在一个数字只出现一次.给定一个整数序列, ...