日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

并不对劲的bzoj2038:p1494:[国家集训队]小Z的袜子

發(fā)布時(shí)間:2024/8/26 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并不对劲的bzoj2038:p1494:[国家集训队]小Z的袜子 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目大意

\(n\)(\(n\leq5*10^4\))個(gè)數(shù)\(a_1,a_2,...,a_n\)(\(\forall i\in[1,n], 1\leq a_i\leq n\))
\(m\)(\(m\leq5*10^4\))次詢問,每次給出區(qū)間\([L,R]\),求在\(a_L,a_{L+1},...,a_R\)中隨機(jī)選兩個(gè)數(shù),兩數(shù)相等的概率

題解

設(shè)區(qū)間\([L,R]\)中,值為\(i\)的數(shù)的個(gè)數(shù)為\(b_i\)
那么答案就是\(\sum_{i=1}^{n}{C_{b_i}^{2}}\)
發(fā)現(xiàn)將區(qū)間變成\([L+1,R],[L,R+1],[L-1,R],[L,R-1]\)時(shí),維護(hù)\(b\)數(shù)組的復(fù)雜度是\(\Theta(1)\)
這樣就可以用莫隊(duì)離線解決了

代碼
#include<algorithm> #include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<ctime> #include<iomanip> #include<iostream> #include<map> #include<queue> #include<set> #include<stack> #include<vector> #define rep(i,x,y) for(register int i=(x);i<=(y);++i) #define dwn(i,x,y) for(register int i=(x);i>=(y);--i) #define maxn 50010 #define blo 223 #define LL long long using namespace std; int read() {int x=0,f=1;char ch=getchar();while(!isdigit(ch)&&ch!='-')ch=getchar();if(ch=='-')f=-1,ch=getchar();while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();return x*f; } void write(LL x) {if(x==0){putchar('0');return;}int f=0;char ch[20];if(x<0)putchar('-'),x=-x;while(x)ch[++f]=x%10+'0',x/=10;while(f)putchar(ch[f--]);return; } struct que{int l,r,id;}q[maxn]; int nowl,nowr,num[maxn],n,m,a[maxn]; LL ansa[maxn],ansb[maxn],nowans; LL gcd(LL a,LL b) {if(a>b)swap(a,b);if(!a)return b;return gcd(b%a,a); } bool cmpl(que x,que y){return x.l<y.l;} bool cmpr1(que x,que y){return x.r<y.r;} bool cmpr2(que x,que y){return x.r>y.r;} LL c2(int x){return (LL)x*(LL)(x-1)/2ll;} int main() {n=read(),m=read();rep(i,1,n)a[i]=read();rep(i,1,m)q[i].l=read(),q[i].r=read(),q[i].id=i;sort(q+1,q+m+1,cmpl);for(int i=1,s=1,t=1+blo;s<=m;s=t+1,t=s+blo,i){int lim=min(t,m);if(i&1)sort(q+s,q+lim+1,cmpr1);else sort(q+s,q+lim+1,cmpr2);}nowl=1,nowr=0;rep(i,1,m){while(nowr<q[i].r)nowr++,nowans-=c2(num[a[nowr]]),num[a[nowr]]++,nowans+=c2(num[a[nowr]]);while(nowl>q[i].l)nowl--,nowans-=c2(num[a[nowl]]),num[a[nowl]]++,nowans+=c2(num[a[nowl]]);while(nowr>q[i].r)nowans-=c2(num[a[nowr]]),num[a[nowr]]--,nowans+=c2(num[a[nowr]]),nowr--;while(nowl<q[i].l)nowans-=c2(num[a[nowl]]),num[a[nowl]]--,nowans+=c2(num[a[nowl]]),nowl++;if(nowans==0)ansa[q[i].id]=0,ansb[q[i].id]=1;else{ansa[q[i].id]=nowans,ansb[q[i].id]=c2(q[i].r-q[i].l+1);LL gdc=gcd(ansa[q[i].id],ansb[q[i].id]);ansa[q[i].id]/=gdc,ansb[q[i].id]/=gdc;}}rep(i,1,m)write(ansa[i]),putchar('/'),write(ansb[i]),putchar('\n');return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/xzyf/p/10391449.html

總結(jié)

以上是生活随笔為你收集整理的并不对劲的bzoj2038:p1494:[国家集训队]小Z的袜子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。