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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

BZOJ3745: [Coci2015]Norma【CDQ】

發(fā)布時(shí)間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ3745: [Coci2015]Norma【CDQ】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

3745: [Coci2015]Norma

我們對(duì)于a序列分治,枚舉左端點(diǎn)(從右往左)維護(hù)MINMINMINMAXMAXMAX,右端點(diǎn)同時(shí)更新兩個(gè)指針j,k,表示a[mid+1,j]≤MAXa[mid+1,j] \le MAXa[mid+1,j]MAXMIN≤a[mid+1,k]MIN\le a[mid+1,k]MINa[mid+1,k]

于是右半邊被分成三份。

這里設(shè)j&lt;kj&lt;kj<k

1.MIN?MAX?∑t=mid+1j(t?i+1)MIN * MAX * \sum_{t=mid+1}^{j} (t-i+1)MIN?MAX?t=mid+1j?(t?i+1)等差數(shù)列求一下就可以了。

2.MIN?∑t=j+1k(min[j+1,t]?(t?i+1))MIN * \sum_{t=j+1}^{k}(min[j+1,t] * (t-i+1))MIN?t=j+1k?(min[j+1,t]?(t?i+1))預(yù)處理出min[j+1,t]?tmin[j+1,t] * tmin[j+1,t]?tmin[j+1,t]min[j+1,t]min[j+1,t]的前綴和。

3.∑t=k+1R(min[j+1,t]?max[j+1,t]?(t?i+1))\sum_{t=k+1}^R(min[j+1,t]*max[j+1,t]*(t-i+1))t=k+1R?(min[j+1,t]?max[j+1,t]?(t?i+1))同2

爆精度查了半天QAQ

#include<cstdio> #include<algorithm> using namespace std; const int MOD=1e9,MAXN=500005; int n;long long Ans,a[MAXN],sn[MAXN],snj[MAXN],sm[MAXN],smj[MAXN],snm[MAXN],snmj[MAXN]; #include<cctype> int read(){int ret=0;char ch=getchar();bool f=1;for(;!isdigit(ch);ch=getchar()) f^=!(ch^'-');for(; isdigit(ch);ch=getchar()) ret=(ret<<1)+(ret<<3)+ch-48;return f?ret:-ret; } void Solve(int L,int R){if(L==R){Ans=(Ans+a[L]*a[L]%MOD)%MOD;return;}int mid=(R+L)>>1;Solve(L,mid),Solve(mid+1,R);sn[mid]=snj[mid]=sm[mid]=smj[mid]=snm[mid]=snmj[mid]=0;long long MAX=0,MIN=1<<30;for(int i=mid+1;i<=R;i++){MAX=max(MAX,a[i]),MIN=min(MIN,a[i]);sn[i]=(sn[i-1]+MIN)%MOD;sm[i]=(sm[i-1]+MAX)%MOD;snj[i]=(snj[i-1]+MIN*i%MOD)%MOD;smj[i]=(smj[i-1]+MAX*i%MOD)%MOD;snm[i]=(snm[i-1]+MIN*MAX%MOD)%MOD;snmj[i]=(snmj[i-1]+MIN*MAX%MOD*i%MOD)%MOD;}MAX=0,MIN=1<<30;for(int i=mid,j=mid,k=mid;i>=L;i--){MAX=max(MAX,a[i]),MIN=min(MIN,a[i]);while(j<R&&a[j+1]<=MAX) j++;while(k<R&&a[k+1]>=MIN) k++;int x=min(j,k),y=max(j,k);Ans=(Ans+MAX*MIN%MOD*(1ll*(mid-i+x-i+3)*(x-mid)/2%MOD))%MOD;Ans=(Ans+(snmj[R]-snmj[y]-(snm[R]-snm[y])*(i-1)%MOD)%MOD+MOD)%MOD;if(k<j) Ans=(Ans+MAX*(snj[y]-snj[x]-(sn[y]-sn[x])*(i-1)%MOD)%MOD+MOD)%MOD;else Ans=(Ans+MIN*(smj[y]-smj[x]-(sm[y]-sm[x])*(i-1)%MOD)%MOD+MOD)%MOD;} } int main(){n=read();for(int i=1;i<=n;i++) a[i]=read();Solve(1,n);printf("%lld\n",Ans);return 0; }

總結(jié)

以上是生活随笔為你收集整理的BZOJ3745: [Coci2015]Norma【CDQ】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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