P1494 小Z的袜子

  • 莫队板子题,对询问进行排序+分块,从而得到巧妙的复杂度
  • 对于L,R的询问。

    设其中颜色为x,y,z的袜子的个数为a,b,c...

    那么答案即为 (a*(a-1)/2+b*(b-1)/2+c*(c-1)/2....)/((R-L+1)*(R-L)/2)(a∗(a−1)/2+b∗(b−1)/2+c∗(c−1)/2....)/((R−L+1)∗(R−L)/2)

    化简得: (a^2+b^2+c^2+...x^2-(a+b+c+d+.....))/((R-L+1)*(R-L))(a2+b2+c2+...x2−(a+b+c+d+.....))/((R−L+1)∗(R−L))

    即: (a^2+b^2+c^2+...x^2-(R-L+1))/((R-L+1)*(R-L))(a2+b2+c2+...x2−(R−L+1))/((R−L+1)∗(R−L))

    我们需要解决的一个问题

    求一个区间内每种颜色数目的平方和。

  • 大佬博客
  • 代码:
#include <cstdio>
#include <iostream>
#include <cctype>
#include <algorithm>
#include <cmath>
using namespace std; typedef long long LL;
#define res register int
inline int read()
{
int x(0),f(1); char ch;
while(!isdigit(ch=getchar())) if(ch=='-') f=-1;
while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
return f*x;
} const int N=50005;
struct node{int x,y,z;LL p,q;}a[N];
int pos[N],c[N];
LL cnt[N];
int n,m,block; inline bool cmp1(const node &n1,const node &n2)
{
if(pos[n1.x]==pos[n2.x]) return n1.y<n2.y;
return n1.x<n2.x;
}
inline bool cmp2(const node &a,const node &b)
{ return a.z<b.z; } inline LL gcd(LL a,LL b) { return b?gcd(b,a%b):a; } LL ans;
inline void update(int i,int d)
{
ans-=cnt[c[i]] * cnt[c[i]];
cnt[c[i]]+=d;
ans+=cnt[c[i]] * cnt[c[i]];
} inline void solve()
{
ans=0;
int l=1,r=0;
for(res i=1 ; i<=m ; ++i)
{
if(a[i].x==a[i].y)
{
a[i].p=0; a[i].q=1;
continue;
}
for( ; r<a[i].y ; ++r) update(r+1,1);
for( ; r>a[i].y ; --r) update(r,-1);
for( ; l<a[i].x ; ++l) update(l,-1);
for( ; l>a[i].x ; --l) update(l-1,1); LL len=a[i].y-a[i].x+1;
a[i].p=ans-len;
a[i].q=len*(len-1);
LL tmp=gcd(a[i].p,a[i].q);
a[i].p/=tmp; a[i].q/=tmp;
}
}
int main()
{
n=read(); m=read();
for(res i=1 ; i<=n ; ++i) c[i]=read();
for(res i=1 ; i<=m ; ++i)
a[i].x=read(),a[i].y=read(),a[i].z=i; block = sqrt(n);
for(res i=1 ; i<=n ; ++i) pos[i]=(i-1)/block+1; sort(a+1,a+m+1,cmp1);
solve();
sort(a+1,a+m+1,cmp2);
for(res i=1 ; i<=m ; ++i)
printf("%lld/%lld\n",a[i].p,a[i].q);
return 0;
}

  

P1494 小Z的袜子的更多相关文章

  1. Bzoj2038/洛谷P1494 小Z的袜子(莫队)

    题面 Bzoj 洛谷 题解 考虑莫队算法,首先对询问进行分块(分块大小为\(sqrt(n)\)),对于同一个块内的询问,按照左端点为第一关键字,右端点为第二关键字排序.我们统计这个区间内相同的颜色有多 ...

  2. P1494 小Z的袜子 【普通莫队】

    我的第二道莫队题,对莫队又有了自己的看法. 在第一题的基础上之上,觉得莫队有个很关键的地方在于 莫队所维护的值是什么,怎么推出维护的公式来. 这道题就是这样,一开始还没自己推出公式来,也有几个坑点. ...

  3. P1494 小Z的袜子 莫队

    题干 就是将$add$和$del$函数里的$ans$变化变成组合数嘛, 先预处理出$x$只相同袜子一共有$f[x] = 1+2+...+$$(x-1)$种组合, 要注意,由于$f[x]$是一直加到$x ...

  4. 洛谷P1494 小Z的袜子

    题意:在[l, r]之中任选两个数,求它们相同的概率. 解: 莫队入门. 概率这个很好搞,就是cnt * (cnt - 1) / 2. 然后发现每次挪指针的时候,某一个cnt会+1或-1.这时候差值就 ...

  5. 洛谷P1494小Z的袜子 [国家集训队] 莫队

    正解:莫队 解题报告: 这是,传送门qwq 昂大概是莫队板子题? 首先可以推出来答案是(∑C(2,color[i]))/C(2,r-l+1)趴?挺显然的不解释了qwq 然后显然除数直接做就成,考虑怎么 ...

  6. P1494 [国家集训队]小Z的袜子(luogu)

    P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线( ...

  7. P1494 [国家集训队]小Z的袜子

    题目 P1494 [国家集训队]小Z的袜子 解析 在区间\([l,r]\)内, 任选两只袜子,有 \[r-l+1\choose2\] \[=\frac{(r-l+1)!}{2!(r-l-1)!}\] ...

  8. P1494 [国家集训队]小Z的袜子/莫队学习笔记(误

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...

  9. 【洛谷】1494:[国家集训队]小Z的袜子【莫队】

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

随机推荐

  1. oss browser

    版本问题 https://github.com/aliyun/oss-browser/blob/master/all-releases.md?spm=5176.doc61872.2.7.Ic2az6& ...

  2. hdu-1147(跨立实验)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1147 思路:判断每条线段,如果将要输入的线段和已经有的线段相交,则这条线段不算. 参考文章:https ...

  3. Python全栈2期 备忘

    http://www.cnblogs.com/linhaifeng/ http://www.cnblogs.com/alex3714/ http://www.cnblogs.com/wupeiqi/ ...

  4. js数组合并(一个数组添加到另一个数组里面)方法

    js定义两个数组. var arrA=[1,2,3]; var arrB=[4,5,6]; 要实现[1,2,3,4,5,6],如果直接arrA.push(arrB); 则arrB只会作为了arrA的一 ...

  5. c语言中几个常见的库函数strlen、strcmp、strcat、strcpy、strncpy、memset、memcpy、memmove、mmap

    1.strlen() 1)计算给定字符串的长度,不包括’\0’在内 unsigned int strlen(const char *s) { assert(NULL != s);//如果条件不满足,则 ...

  6. 新建maven web 项目后,出现的小问题

    问题一:Description Resource Path Location TypeCannot change version of project facet Dynamic Web Module ...

  7. HBase Thrift2 CPU过高问题分析

    目录 目录 1 1. 现象描述 1 2. 问题定位 2 3. 解决方案 5 4. 相关代码 5 1. 现象描述 外界连接9090端口均超时,但telnet端口总是成功.使用top命令观察,发现单个线程 ...

  8. APUE(5)---标准I/O库 (3)

    十.定位流 #include <stdio.h> long ftell(FILE *fp); //若成功,返回当前文件位置指示:若出错,返回-1L int fseek(FILE *fp, ...

  9. hdu 1300 Deck

    题目 分析:对于n张卡片的最佳摆法,我们只需要在n-1张卡片的摆法下面加一张边缘与桌檐重合的卡片,并将所有卡片一起向桌檐外移动.对于一种最佳摆法,其中心一定在桌檐上,所以一定符合杠杆原理,支点是桌檐. ...

  10. java web 通过前台输入的数据(name-value)保存到后台 xml文件中

    一:项目需求,前端有一个页面,页面中可以手动输入一些参数数据,通过点击前端的按钮,使输入的数据保存到后台生成的.xml文件中 二:我在前端使用的是easyui的propertygrid,这个能通过da ...