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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【bzoj2038】[国家集训队2010]小Z的袜子 莫队

發(fā)布時(shí)間:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【bzoj2038】[国家集训队2010]小Z的袜子 莫队 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

莫隊(duì):就是一坨軟軟的有彈性的東西Duang~Duang~Duang~

? ? ? ? 為了防止以左端點(diǎn)為第一關(guān)鍵字以右端點(diǎn)為第二關(guān)鍵字使右端點(diǎn)彈來彈去,所以讓左端點(diǎn)所在塊為關(guān)鍵字得到O(n1.5)的時(shí)間效率,至于分塊的優(yōu)化,根本用不到。

#include<cstdio> #include<algorithm> #include<cmath> #include<iostream> #define MAXN 50005 using namespace std; typedef long long LL; struct Query {LL l,r,a,b,id; }query[MAXN]; LL pos[MAXN]; int cmp(const Query a,const Query b) {return a.id<b.id; } int comp(const Query a,const Query b) {if(pos[a.l]<pos[b.l])return 1;if(pos[a.l]==pos[b.l]&&a.r<b.r)return 1;return 0; } LL a[MAXN],s[MAXN],n,m,len,l,r,ans; LL gcd(LL x,LL y) {return y==0?x:gcd(y,x%y); } inline void did(LL x,LL di) {ans-=s[a[x]]*s[a[x]];s[a[x]]+=di;ans+=s[a[x]]*s[a[x]]; } inline void work() {for(LL i=1;i<=m;i++){while(l<query[i].l)did(l++,-1);while(l>query[i].l)did(--l,1);while(r<query[i].r)did(++r,1);while(r>query[i].r)did(r--,-1);if(l==r){query[i].a=0;query[i].b=1;continue;}LL son=ans-(r-l+1);LL mo=(LL)(r-l)*(r-l+1);LL k=gcd(son,mo);query[i].a=son/k;query[i].b=mo/k;} } int main() {freopen("hose.in", "r", stdin);freopen("hose.out", "w", stdout);scanf("%lld%lld",&n,&m);len=(LL)(sqrt(n+0.5));l=r=ans=1;for(LL i=1;i<=n;i++){scanf("%lld",&a[i]);pos[i]=(i-1)/len+1;}s[a[1]]++;for(LL i=1;i<=m;i++){scanf("%lld%lld",&query[i].l,&query[i].r);query[i].id=i;}sort(query+1,query+1+m,comp);work();sort(query+1,query+m+1,cmp);for(LL i=1;i<=m;i++)printf("%lld/%lld\n",query[i].a,query[i].b);return 0; }

?

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

總結(jié)

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

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