COCI2014/2015 Contest#2 F Solution
来源:互联网 发布:java 接口变量 编辑:程序博客网 时间:2024/04/30 09:03
Description
给出数列A,求
Solution
怎么看都像数据结构或者贪心的题目,然而正解却是分治。
这个分治就是分而治之,并没有归并。
首先对于区间
区间
我们可以轻松的计算其值。
然后是区间
最后是区间
#include<iostream>#include<algorithm>using namespace std;const int INF=(unsigned)-1>>1,M=1e5+5,P=1e9;int A[M],n,sMx[M],sMn[M],cMx[M],cMn[M],cM[M],sM[M];inline void rd(int &a){ a=0;char c; while(c=getchar(),!isdigit(c)); do a=a*10+(c^48); while(c=getchar(),isdigit(c));}inline void Max(int &a,int b){if(a<b)a=b;}inline void Min(int &a,int b){if(a>b)a=b;}inline void Mod_add(int &a,int b){if((a+=b)>=P)a-=P;}inline int dis(int l1,int l2){return 1ll*((l2-l1+1)*(l1+l2)>>1)%P;}int solve(int l,int r){ if(l==r)return 1ll*A[l]*A[l]%P; int mid=l+r>>1,ans;if((ans=solve(l,mid)+solve(mid+1,r))>=P)ans-=P; for(int i=mid+1,rMx=0,rMn=INF,len;len=i-mid,i<=r;++i){ Max(rMx,A[i]),Min(rMn,A[i]),sMx[i]=rMx,sMn[i]=rMn; cMx[i]=1ll*rMx*len%P,cMn[i]=1ll*rMn*len%P; cM[i]=1ll*len*rMx*rMn%P,sM[i]=1ll*rMx*rMn%P; } for(int i=r-1;i>mid;--i){ Mod_add(cMx[i],cMx[i+1]),Mod_add(cMn[i],cMn[i+1]); Mod_add(cM[i],cM[i+1]),Mod_add(sM[i],sM[i+1]); Mod_add(sMx[i],sMx[i+1]),Mod_add(sMn[i],sMn[i+1]); } for(int i=mid,px=mid+1,pn=mid+1,lMx=0,rMx=0,lMn=INF,rMn=INF;i>=l;--i){ Min(lMn,A[i]),Max(lMx,A[i]); for(;px<=r&&(rMx=max(A[px],rMx))<=lMx;++px); for(;pn<=r&&(rMn=min(A[pn],rMn))>=lMn;++pn); int L=min(pn,px),R=max(pn,px); Mod_add(ans,1ll*lMx*lMn%P*dis(mid-i+2,L-i)%P); Mod_add(ans,(cM[R]+1ll*sM[R]*(mid-i+1))%P); if(L==pn)Mod_add(ans,((cMn[pn]-cMn[px]+1ll*(sMn[pn]-sMn[px])*(mid-i+1))%P+P)%P*lMx%P); else Mod_add(ans,((cMx[px]-cMx[pn]+1ll*(sMx[px]-sMx[pn])*(mid-i+1))%P+P)%P*lMn%P); } return ans;}int main(){ cin>>n;for(int i=1;i<=n;++i)rd(A[i]); cout<<solve(1,n)<<endl; return 0;}
orz Leefir的数形结合套线段树,orz他的神奇的三角形,orz ShinFeb的5K的分类讨论
0 0
- COCI2014/2015 Contest#2 F Solution
- COCI2014/2015CONTEST #3 dom
- COCI2014/2015CONTEST #3 kamioni
- COCI2014/2015CONTEST #3 honi&stogovi(LCA)
- 模拟赛心得体会&COCI2014/2015CONTEST #1
- 2017.5.17 COCI2014/2015 Contest#5
- COCI2015/2016 Contest#4 F Solution
- COCI2011/2012 Contest#1 F Solution
- 模拟赛心得体会&COCI2014/2015CONTEST #3 silueta&strojopis
- Andrew Stankevich's Contest #2 Solution
- coci2014 contest#1 T5-zabavz—— dp
- coci2014 contest#1 T3-PIRAMIDA—— 数学
- USACO 2015 February CONTEST,Silver&Gold Division Solution
- USACO 2015 US OPEN CONTEST,Silver Division Solution
- USACO 2015 US OPEN CONTEST,Gold Division Solution
- contest 1 F
- hdu 5045 F - Contest
- JAG Practice Contest 2011 Solution
- Centos6 rpm 安装mysql5.5
- linux下查看最消耗CPU、内存的进程
- perl 自动登陆网站发短信
- 解决了一个butterknife,报空指针的bug
- 关于微信第三方授权登陆 使用code获取token时返回40029
- COCI2014/2015 Contest#2 F Solution
- TCP/IP编程之listen函数详解
- 初学ML笔记N0.3——凸优化、拉格朗日对偶
- 剑指offer面试题12 使用BigInteger来实现 打印1到最大的n位数
- HOG特征
- bzoj3158 千钧一发
- 数据结构-->队列的链式实现 ADT
- 获取当前计算机所有性能计数器
- markdown的11种简单语法