[BZOJ 1756]小白逛公园
转载请注明出处:http://danihao123.is-programmer.com/
这题是很经典的线段树题。
我们可以发现最长子序列或跨越中点,或不跨越中点。若不跨越则肯定在左子或右子中,跨越则是左子最大后缀和和右子最大前缀和之和。问题便迎刃而解。(当然,求区间最大前缀/后缀和要用上区间和)
需注意此题可能会出现a>b!
代码:
/************************************************************** Problem: 1756 User: danihao123 Language: C++ Result: Accepted Time:2604 ms Memory:49648 kb ****************************************************************/ #include <cstdio> #include <algorithm> using namespace std; const int maxn=500001; struct Node{ int L,R; int maxP,maxS,ans,sum; }; Node Tree[maxn*4]; int A[maxn]; void merge(Node& O,Node& LC,Node& RC){ O.sum=LC.sum+RC.sum; O.maxP=max(LC.maxP,LC.sum+RC.maxP); O.maxS=max(RC.maxS,RC.sum+LC.maxS); O.ans=max(max(LC.ans,RC.ans),LC.maxS+RC.maxP); } void maintain(int o){ Node& O=Tree[o],LC=Tree[o<<1],RC=Tree[o<<1|1]; merge(O,LC,RC); } void build_tree(int o,int L,int R){ Node& O=Tree[o]; O.L=L; O.R=R; if(L==R){ O.maxP=O.maxS=O.ans=O.sum=A[L]; }else{ int M=L+(R-L)/2; build_tree(o<<1,L,M); build_tree(o<<1|1,M+1,R); maintain(o); } } void update(int o,int p,int v){ Node& O=Tree[o]; int& L=O.L,R=O.R; if(L==R){ O.maxP=O.maxS=O.ans=O.sum=v; }else{ int M=L+(R-L)/2; if(p<=M) update(o<<1,p,v); else update(o<<1|1,p,v); maintain(o); } } int ql,qr; Node query(int o){ Node& O=Tree[o]; int& L=O.L,R=O.R; if(ql<=L && R<=qr){ return Tree[o]; } int M=L+(R-L)/2; Node ANS,LC,RC; if(ql<=M){ LC=query(o<<1); if(qr>M){ RC=query(o<<1|1); merge(ANS,LC,RC); return ANS; }else{ return LC; } }else{ RC=query(o<<1|1); return RC; } } int main(){ int n,m; register int i; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%d",&A[i]); build_tree(1,1,n); int k,a,b; Node ans; for(i=1;i<=m;i++){ scanf("%d%d%d",&k,&a,&b); if(k&1){ if(a>b) swap(a,b); ql=a; qr=b; ans=query(1); printf("%d\n",ans.ans); }else{ update(1,a,b); } } return 0; }
Jul 01, 2023 06:07:47 PM
To give expert news coverage of recent events around the country (India), professional writers have collaborated to develop the question-paper project. Our team consists of professional writers and citizen प्रश्नपत्र.com journalists with a variety of media interests who are dedicated to providing education updates in the public interest while ensuring openness.Our team consists of professional writers and citizen journalists with a variety of media interests who are dedicated to providing education updates in the public interest while ensuring openness.
Jul 11, 2023 10:44:33 PM
The activation code will appear on the TV screen when the streaming device has been connected. To enter the activation code, go to official website. First, you must log in to your TV provider and then select the Activate Now option to begin the activation procedure. bravotv.com/activation code Users may log in to the Bravo TV channel on their Smart TV or streaming device with this code and the service is now available on Android, Roku, Amazon Fire TV, Apple TV, iOS devices, computers, tablets, and Smart TVs.
Jul 15, 2023 04:22:37 PM
WBBSE Board of Secondary Education is the West Bengal state Government Administered Autonomous Examining Authority are Published by English, Bengali Medium Textbooks from Standard 10th Addition, WBBSE Every Year Publish and Distribution WBBSE 10th Class Books 2024 West Bengal Std 10th Class Textbook 2024 for High School Students Study Purpose,The Printed WBBSE 10th Class Textbook 2024 are Distributed Through Cooperative Institutions All over Gujarat. Vendors are Linked to the Distribution of Textbooks with Distributors in each District. West Bengal Board Class Book 2024 are easily Accessible to All Students of This System.