題目點著
題意是一段區間,q次詢問一段區間最大連續欄位和
看了眼白書,每段最大連續子段和為
左子樹的最大子段,右子樹的最大子段,或橫跨左右的最大子段
這三個裡面最大的
每個節點維護3個值,最大字首子段(l開頭),最大字尾子段(r結尾),最大子段
wawawawawawawa。。。。。。
**能力捉急,先存著,等到海枯石爛那天在回頭看
#include//cww=2016.3.6
#include
#include
#include
using namespace std;
typedef long long ll;
typedef pair pa;
const int n=1000100;
int ql,qr;
ll s[n];
ll sum(int l,int r)
ll sum(pa x)
pa better(pa a,pa b)
intlc=t<<1,rc=lc+1,mid=l+(r-l)/2;
build(lc,l,mid); //子樹
build(rc,mid+1,r);
ll x=sum(l,pre[lc]);//pre
lly=sum(l,pre[rc]);
if (x==y)pre[t]=min(pre[lc],pre[rc]);
else pre[t]=x>y?pre[lc]:pre[rc];
x=sum(suf[lc],r);//suf
y=sum(suf[rc],r);
if (x==y)suf[t]=min(suf[lc],suf[rc]);
else suf[t]=x>y?suf[lc]:suf[rc];
sub[t]=better(sub[lc],sub[rc]); //sub
sub[t]=better(sub[t],make_pair(suf[lc],pre[rc]));
}pa querypre(int t,int l,int r)
pa querysuf(int t,int l,int r)
pa query(int t,int l,int r)
}t;int main()
t.build(1,1,n);
printf("case %d:\n", ++cas);
while (q--)
}return
0;}
UVALive 8080 又是一道dfs題
includeusing namespace std vector a 200000 int d 200000 int k int dfs int u,int par int sum 0 int res 2000 int cou 0 for int i 0 i t int cc 1 while t ...
一道演算法題
兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...
一道演算法題
1.上午主要做了對翻譯任務的劃分,下午把 翻譯完畢。2.明天要講的演算法題 對乙個集合,求出其連續元素組成的子集中,和最大的子集 我對這道題的理解是 1 若集合中最小值大於0,意味著所有的都大於0,則最大的子集和,為所有值加起來 2 若集合中最大值小於0,意味著所有的都小於0,則最大的子集和,為集合...