UVALive 3938 一道被我WA了的線段樹

2022-08-15 08:21:08 字數 1294 閱讀 2316

題目點著

題意是一段區間,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,則最大的子集和,為集合...