博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 2038 小Z的袜子
阅读量:5313 次
发布时间:2019-06-14

本文共 1721 字,大约阅读时间需要 5 分钟。

这算的上是不带修改的莫队里边比较经典,也比较难的一道题了。

L=R的情况就不过多考虑了。

首先明确概率的计算方式,设总数为sum,其中数字a有C[a]种,那么a的几率就为C[a]/sum*(C[a]-1)/(sum-1).

要求化简为最简分数,那么我们可以先让所有数的几率都以sum*(sum-1)为底,那么我们现在只需要计算每种数字的 种类数*(种类数-1) 就可以了。

这题基本思想和 小B的询问 差不多,新加入或删除的数字,在答案中减去过去的贡献,加上现在所含的贡献。

例如:

序列中现已找到C[a]个a数,那么现在a这一类数对于答案的贡献为C[a]*(C[a]-1).那么如果再次加入一个a,那么则需要减掉C[a]*(C[a]-1),加上C[a]*(C[a]+1),这个式子化简以下的话可以当做加上2*C[a],删除同理。

#include 
#include
#include
#include
#include
#define N int(5e4+2)#define M int(5e4+2)#define LL long longusing namespace std;struct ahah{ LL L,R,p,f;}ask[N];struct haha{ LL math_numerator,math_denominator; //分子,分母。 }ans[N];LL answer,n,m,q,a[N],cnt[N],k,_;LL gcd(LL a,LL b){ return !b?a:gcd(b,a%b); }bool comp(ahah a,ahah b){ return a.L/k==b.L/k?a.R
0)answer+=(-2)*(cnt[a[pos]]);}void add(LL pos){ if(++cnt[a[pos]]>1)answer+=2*(cnt[a[pos]]-1); }void work(LL x,LL y,LL p){ if(!x)ans[p].math_numerator=0,ans[p].math_denominator=1; else { LL k=gcd(x,y); ans[p].math_numerator=x/k; ans[p].math_denominator=y/k; }}int main(){ scanf("%lld%lld",&n,&q); k=sqrt(n); for(int i=1;i<=n;i++)scanf("%lld",&a[i]); for(int i=1;i<=q;i++)scanf("%lld%lld",&ask[i].L,&ask[i].R),ask[i].p=i; sort(ask+1,ask+1+q,comp); LL curl=0,curr=0; //注意这里定义long long 不然下边会可能爆 for(int i=1;i<=q;i++) { LL L=ask[i].L,R=ask[i].R; if(L==R) { ans[ask[i].p].math_numerator=0; ans[ask[i].p].math_denominator=1; continue; } while(curl
L)add(--curl); while(curr
R)remove(curr--); work(answer,(R-L+1)*(R-L),ask[i].p); // <---- } for(int i=1;i<=q;i++)printf("%lld/%lld\n",ans[i].math_numerator,ans[i].math_denominator);}

 

转载于:https://www.cnblogs.com/rmy020718/p/9439859.html

你可能感兴趣的文章
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
关于View控件中的Context选择
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
Spark的启动进程详解
查看>>
使用命令创建数据库和表
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
linux下Rtree的安装
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>