BZOJ[2038][2009国家集训队]小Z的袜子(hose) 莫队
2018-01-14 13:53
483 查看
传送门ber~
要求区间[l,r]内选出两个相同颜色的概率,即求
(C2cnt1+C2cnt2+...+C2cntk)/C2r−l+1
(cnt21−cnt1+cnt22−cnt2+...+cnt2k−cntk)2/(r−l+1)∗(r−l)2
其中cnti为颜色为i的袜子有多少个,所以
cnt1+cnt2+cnt3+...+cntk=r−l+1
所以刚才的式子就化为
(cnt21+cnt22+...+cnt2k−(r−l+1))/((r−l+1)∗(r−l))
区间平方和可以用莫队维护,见BZOJ[3781]
代码如下:
要求区间[l,r]内选出两个相同颜色的概率,即求
(C2cnt1+C2cnt2+...+C2cntk)/C2r−l+1
(cnt21−cnt1+cnt22−cnt2+...+cnt2k−cntk)2/(r−l+1)∗(r−l)2
其中cnti为颜色为i的袜子有多少个,所以
cnt1+cnt2+cnt3+...+cntk=r−l+1
所以刚才的式子就化为
(cnt21+cnt22+...+cnt2k−(r−l+1))/((r−l+1)∗(r−l))
区间平方和可以用莫队维护,见BZOJ[3781]
代码如下:
#include<algorithm> #include<ctype.h> #include<cstdio> #include<cmath> #define N 50050 using namespace std; inline int read(){ int x=0,f=1;char c; do c=getchar(),f=c=='-'?-1:f; while(!isdigit(c)); do x=(x<<3)+(x<<1)+c-'0',c=getchar(); while(isdigit(c)); return x*f; } typedef long long LL; int n,m,Block_size,l=1,r; int a ,block ,cnt ; LL tmp; struct Result{ LL x,y; Result(){} Result(int _,int __):x(_),y(__){} inline void print(){ printf("%lld/%lld\n",x,y); } }ans ; struct Query{ int l,r,id; }q ; inline bool cmp(Query a,Query b){ return block[a.l]==block[b.l]?a.r<b.r:block[a.l]<block[b.l]; } LL gcd(LL x,LL y){ return (!y)?x:gcd(y,x%y); } inline Result Trans(LL x,LL y){ LL t=gcd(x,y); return Result(x/t,y/t); } inline void Update(int x,int k){ tmp-=cnt[x]*cnt[x]; cnt[x]+=k; tmp+=cnt[x]*cnt[x]; } int main(){ n=read();m=read(); Block_size=sqrt(n); for(int i=1;i<=n;i++){ a[i]=read(); block[i]=(i-1)/Block_size+1; } for(int i=1;i<=m;i++){ q[i].l=read();q[i].r=read(); q[i].id=i; } sort(q+1,q+m+1,cmp); for(int i=1;i<=m;i++){ while(l<q[i].l) Update(a[l++],-1); while(l>q[i].l) Update(a[--l],1); while(r<q[i].r) Update(a[++r],1); while(r>q[i].r) Update(a[r--],-1); if(q[i].r==q[i].l) ans[q[i].id].y=1; else ans[q[i].id]=Trans(tmp-(q[i].r-q[i].l+1),1ll*(q[i].r-q[i].l+1)*(q[i].r-q[i].l)); } for(int i=1;i<=m;i++) ans[i].print(); return 0; }
相关文章推荐
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)(莫队算法)
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) (莫队)
- bzoj 2038: [2009国家集训队]小Z的袜子(hose)(莫队算法)
- bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队算法
- bzoj 2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)&&莫队算法
- [BZOJ]2038: [2009国家集训队]小Z的袜子(hose) 莫队算法
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 莫队
- bzoj 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
- bzoj 2038: [2009国家集训队]小Z的袜子(hose)(莫队算法)
- bzoj 2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
- BZOJ 2038 2009国家集训队 小Z的袜子(hose) 莫队算法
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) | 莫队
- BZOJ2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)(莫队算法)
- bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队算法
- BZOJ 2038 [2009国家集训队]小Z的袜子(hose) (莫队算法)
- 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))