BZOJ3745: [Coci2015]Norma【CDQ】
3745: [Coci2015]Norma
我們對于a序列分治,枚舉左端點(從右往左)維護MINMINMIN和MAXMAXMAX,右端點同時更新兩個指針j,k,表示a[mid+1,j]≤MAXa[mid+1,j] \le MAXa[mid+1,j]≤MAX和MIN≤a[mid+1,k]MIN\le a[mid+1,k]MIN≤a[mid+1,k]。
于是右半邊被分成三份。
這里設j<kj<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)等差數列求一下就可以了。
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))預處理出min[j+1,t]?tmin[j+1,t] * tmin[j+1,t]?t和min[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; }總結
以上是生活随笔為你收集整理的BZOJ3745: [Coci2015]Norma【CDQ】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 组策略修改 之 初始化文
- 下一篇: 177本名著浓缩成了177句话!经典收藏