{"id":46,"date":"2009-11-27T21:35:00","date_gmt":"2009-11-27T13:35:00","guid":{"rendered":"http:\/\/localhost\/?p=46"},"modified":"2009-11-27T21:35:00","modified_gmt":"2009-11-27T13:35:00","slug":"spoj_2916_gss5","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=46","title":{"rendered":"SPOJ 2916 GSS5"},"content":{"rendered":"<p> https:\/\/www.spoj.pl\/problems\/GSS5\/<br \/>\u8fd9\u9053\u9898\u4e0d\u96be\u5173\u952e\u662f\u6211\u8fd9\u4e2a\u5199\u6cd5\u3002\u3002<br \/>\u5b9e\u5728\u662f\u592aNB\u4e86\u3002\u3002\uff08\u8fd9\u4e2a\u70e7\u997c\u75af\u4e86\u3002\u3002\uff09<br \/>\u9996\u5148\u5f88\u660e\u663e\u5982\u679cy1&lt;x2\u7684\u8bdd\u3002\u3002<br \/>\u8bbeS\u4e3a\u90e8\u5206\u548c\u5e8f\u5217\u3002\u3002\u90a3\u4e48ans=Max(S,x2..y2)-Min(S,x1-1..y1-1..)\u3002\u3002<br \/>\u5982\u679c\u6709\u91cd\u53e0\u7684\u8bdd\u3002\u3002\u5206\u4e09\u79cd\u60c5\u51b5\u8ba8\u8bba\u3002\u3002\u8bbe\u7b54\u6848\u662fAi..Aj<br \/>i&lt;x2,ans=Max(S,x2..y2)-Min(S,x1-1..x2-1)<br \/>j&gt;y1,ans=Max(S,y1+1..y2)-Min(S,x1-1..y1-1..)<br \/>i&gt;=x2&amp;&amp;j&lt;=y \u8f6c\u5316\u6210\u7ecf\u5178\u95ee\u9898\u4e86\u3002\u3002\u3002<br \/>\u5982\u679c\u76f4\u63a5\u51993\u4e2a\u7ebf\u6bb5\u6811\u4f1a\u5f88BT\u3002\u3002\u53ea\u5199\u4e00\u4e2a\u7684\u8bdd\u53c8\u6d6a\u8d39\u65f6\u95f4\u3002\u3002<br \/>\u6211\u7684Code\u4e2d\u5199\u4e86\u4e2a\u7ebf\u6bb5\u6811\u7684\u6a21\u677f\u3002\u3002\u7136\u540e\u6839\u636e\u4fe1\u606f\u76f4\u63a5\u5f04\u51fa3\u4e2a\u7ebf\u6bb5\u6811\u3002\u3002NB\u963f\uff08\u3002\u3002\u3002\uff09<\/p>\n<p>#include&lt;cstdio&gt;<br \/>#include&lt;iostream&gt;<br \/>#define Renew(x,c) x=max(x,c)<br \/>using namespace std;<br \/>struct MinNum<br \/>{<br \/> int Min;<br \/> MinNum(int a=0):Min(a){}<br \/> MinNum operator+(const MinNum&amp;Rch)<br \/> {<br \/>  MinNum f;  <br \/>  f.Min=min(Min,Rch.Min);<br \/>  return f;<br \/> }<br \/>};<br \/>struct MaxNum<br \/>{<br \/> int Max;<br \/> MaxNum(int a=0):Max(a){}<br \/> MaxNum operator+(const MaxNum&amp;Rch)<br \/> {<br \/>  MaxNum f;  <br \/>  f.Max=max(Max,Rch.Max);<br \/>  return f;<br \/> }<br \/>};<br \/>struct ContMax<br \/>{<br \/> int Max,Lmax,Rmax,Sum;<br \/> ContMax(int a=0):Max(a),Lmax(a),Rmax(a),Sum(a){}<br \/> ContMax operator+(const ContMax&amp;Rch)<br \/> {<br \/>  ContMax f;<br \/>  f.Lmax=max(Lmax,Sum+Rch.Lmax);<br \/>  f.Rmax=max(Rch.Rmax,Rch.Sum+Rmax);<br \/>  f.Sum=Sum+Rch.Sum;<br \/>  f.Max=max(Max,Rch.Max);<br \/>  f.Max=max(f.Max,Rmax+Rch.Lmax);<br \/>  return f;<br \/> }<br \/>};<br \/>template&lt;class info&gt;<br \/>class Tree<br \/>{ <br \/> int*A;int L,R;<br \/> struct tree<br \/> {<br \/>  tree*Lch,*Rch;<br \/>  info Ans;<br \/>  tree(int a=0):Ans(a){}<br \/> }*root;<br \/> tree* build(int l,int r)<br \/> {<br \/>  if(l==r) return new tree(A[l]);<br \/>  int mid=(l+r)\/2;<br \/>  tree* T=new tree;<br \/>  T-&gt;Lch=build(l,mid);<br \/>  T-&gt;Rch=build(mid+1,r);<br \/>  T-&gt;Ans=T-&gt;Lch-&gt;Ans+T-&gt;Rch-&gt;Ans;<br \/>  return T;<br \/> }<br \/> info ask(tree*T,int l,int r,int ll,int rr)<br \/> {<br \/>  if(l==ll and r==rr) return T-&gt;Ans;<br \/>  int mid=(l+r)\/2;<br \/>  if(ll&gt;mid) return ask(T-&gt;Rch,mid+1,r,ll,rr);<br \/>  if(rr&lt;=mid) return ask(T-&gt;Lch,l,mid,ll,rr);<br \/>  return ask(T-&gt;Lch,l,mid,ll,mid)+ask(T-&gt;Rch,mid+1,r,mid+1,rr);<br \/> }<br \/>public:<br \/> Tree(int A[],int L,int R):A(A),L(L),R(R)<br \/> {<br \/>  root=build(L,R);<br \/> }<br \/> info operator()(int l,int r)<br \/> {<br \/>  return ask(root,L,R,l,r);<br \/> }<br \/>};<br \/>const int maxn=10000+100,inf=~0U&gt;&gt;1;<br \/>void solve()<br \/>{<br \/> int A[maxn],S[maxn],n;S[0]=0;<br \/> cin&gt;&gt;n;for(int i=1;i&lt;=n;i++) scanf(&quot;%d&quot;,A+i),S[i]=A[i]+S[i-1];<br \/> Tree&lt;MaxNum&gt; RMQMax(S,0,n);<br \/> Tree&lt;MinNum&gt; RMQMin(S,0,n);<br \/> Tree&lt;ContMax&gt; SegTree(A,1,n);<br \/> int m,x1,y1,x2,y2;cin&gt;&gt;m;<br \/> while(m&#8211;)<br \/> {<br \/>  scanf(&quot;%d %d %d %d&quot;,&amp;x1,&amp;y1,&amp;x2,&amp;y2);int ans=-inf;<br \/>  if(x2&gt;y1)  <br \/>   ans=RMQMax(x2,y2).Max-RMQMin(x1-1,y1-1).Min;<br \/>  else<br \/>  {<br \/>   if(y1&lt;y2) Renew(ans,RMQMax(y1+1,y2).Max-RMQMin(x1-1,y1-1).Min);<br \/>   if(x1&lt;x2) Renew(ans,RMQMax(x2,y2).Max-RMQMin(x1-1,x2-1).Min);<br \/>   Renew(ans,SegTree(x2,y1).Max);<br \/>  }<br \/> <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\">printf<\/a>(&quot;%dn&quot;,ans);<br \/> }<br \/>}<br \/>int main()<br \/>{<br \/> int t;cin&gt;&gt;t;<br \/> while(t&#8211;) solve();<br \/>} <\/p>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/www.spoj.pl\/problems\/GSS5\/\u8fd9\u9053\u9898\u4e0d\u96be\u5173\u952e\u662f\u6211\u8fd9\u4e2a\u5199\u6cd5\u3002\u3002\u5b9e\u5728\u662f\u592aNB\u4e86\u3002\u3002\uff08\u8fd9\u4e2a\u70e7\u997c\u75af\u4e86\u3002\u3002\uff09\u9996\u5148\u5f88\u660e\u663e\u5982\u679cy1&lt;x2\u7684\u8bdd\u3002\u3002\u8bbeS\u4e3a\u90e8\u5206\u548c\u5e8f\u5217\u3002\u3002\u90a3\u4e48ans=Max(S,x2..y2)-Min(S,x1-1..y1-1..)\u3002\u3002\u5982\u679c\u6709\u91cd\u53e0\u7684\u8bdd\u3002\u3002\u5206\u4e09\u79cd\u60c5\u51b5\u8ba8\u8bba\u3002\u3002\u8bbe\u7b54\u6848\u662fAi..Aji&lt;x2,ans=Max(S,x2..y2)-Min(S,x1-1..x2-1)j&gt;y1,ans=Max(S,y1+1..y2)-Min(S,x1-1..y1-1..)i&gt;=x2&amp;&amp;j&lt;=y \u8f6c\u5316\u6210\u7ecf\u5178\u95ee\u9898\u4e86\u3002\u3002\u3002\u5982\u679c\u76f4\u63a5\u51993\u4e2a\u7ebf\u6bb5\u6811\u4f1a\u5f88BT\u3002\u3002\u53ea\u5199\u4e00\u4e2a\u7684\u8bdd\u53c8\u6d6a\u8d39\u65f6\u95f4\u3002\u3002\u6211\u7684Code\u4e2d\u5199\u4e86\u4e2a\u7ebf\u6bb5\u6811\u7684\u6a21\u677f\u3002\u3002\u7136\u540e\u6839\u636e\u4fe1\u606f\u76f4\u63a5\u5f04\u51fa3\u4e2a\u7ebf\u6bb5\u6811\u3002\u3002NB\u963f\uff08\u3002\u3002\u3002\uff09 #include&lt;cstdio&gt;#include&lt;iostream&gt;#define Renew(x,c) x=max(x,c)using namespace std;struct MinNum{ int Min; MinNum(int a=0):Min(a){} MinNum operator+(const MinNum&amp;Rch) { MinNum f; f.Min=min(Min,Rch.Min); return f; }};struct MaxNum{ int Max; MaxNum(int a=0):Max(a){} MaxNum operator+(const MaxNum&amp;Rch) { MaxNum f; f.Max=max(Max,Rch.Max); return f; }};struct ContMax{ int Max,Lmax,Rmax,Sum; ContMax(int a=0):Max(a),Lmax(a),Rmax(a),Sum(a){} ContMax operator+(const ContMax&amp;Rch) { ContMax f; f.Lmax=max(Lmax,Sum+Rch.Lmax); f.Rmax=max(Rch.Rmax,Rch.Sum+Rmax); f.Sum=Sum+Rch.Sum; f.Max=max(Max,Rch.Max); f.Max=max(f.Max,Rmax+Rch.Lmax); return f; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/46"}],"collection":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=46"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/46\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=46"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=46"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}