超神線段樹 山海經

2022-03-27 08:32:45 字數 1786 閱讀 8737

時間限制: 1 sec  記憶體限制: 128 mb

「南山之首日鵲山。其首日招搖之山,臨於西海之上,多桂,多金玉。有草焉,其狀如韭而青華,其名日祝餘,食之不飢……又東三百里,日堂庭之山,多棪木,多白猿,多水玉,多**。

又東三百八十里,日猨翼之山,其中多怪獸,水多怪魚,多白玉,多蝮蟲,多怪蛇,名怪木,不可以上。……」

《山海經》是以山為綱,以海為線記載古代的河流、植物、動物及礦產等情況,而且每一條記錄路線都不會有重複的山出現。某天,你的地理老師想重遊《山海經》中的路線,為了簡化問題,老師已經把每座山用乙個整數表示他對該山的喜惡程度,他想知道第a座山到第b座山的中間某段路(i,j)。能使他感到最滿意,即(i,j)這條路上所有山的喜惡度之和是(c,d)(a≤c≤d≤b)最大值。於是老師便向你請教,你能幫助他嗎?值得注意的是,在《山海經》中,第i座山只能到達第i+1座山。

輸入第1行是兩個數,n,m,2≤n≤100000,1≤m≤100000,n表示一共有n座山,m表示老師想查詢的數目。

第2行是n個整數,代表n座山的喜惡度,絕對值均小於10000。

以下m行每行有a,b兩個數,1≤a≤j≤b≤m,表示第a座山到第b座山。

一共有m行,每行有3個數i,j,s,表示從第i座山到第j座山總的喜惡度為s。顯然,對於每個查詢,有a≤i≤j≤b,如果有多組解,則輸出i最小的,如果i也相等,則輸出j最小的解。

5 3

5 -6 3 -1 4

1 31 5

5 5

1 1 5

3 5 6

5 5 4

超級麻煩qaq。。調了乙個晚上

區間連續和的最大,那麼有三種可能,字首最大,中間一段最大,字尾最大

又因為要輸出區間座標,還要維護字首座標。。。。(字首不需要左端點,字尾。。廢話)以及節點總和。 

那麼pushup還有查詢該怎麼轉移呢?

x.l_max=max(lc.l_max,lc.sum+rc.l_max);

x.mid_max=max(lc.mid_max,lc.r_max+rc.l_max,rc.mid_max);

x.r_max=max(rc.r_max,rc.sum+lc.r_max);

注意值相同按左右端點。 

寫進乙個函式求一下就行了~~

#include#include#include#include#include#define ll long long

#define n 100000

#define hmid a.hr+b.hl

using namespace std;

int n,m,a[n+5];

struct tree

t[n*4+5];

ll read()

while(x>='0'&&x<='9')

return sum*f;

}tree pushup(tree a,tree b)

} }return ans;

}void build(int l,int r,int x)

int mid=(l+r)/2;

build(l,mid,x*2);

build(mid+1,r,x*2+1);

t[x]=pushup(t[x*2],t[x*2+1]);

}tree q(int l,int r,int x)

int mid=(t[x].l+t[x].r)/2;

if(r<=mid)

return q(l,r,x*2);

else }

int yjn()

}int qty=yjn();

int main()

COGS 755 山海經 線段樹

網上似乎這道題的題解很少?寫乙個吧 我跟這道題的淵源追溯到了上個學期剛剛學線段樹的那一天。當時線段樹專題前邊的題都是一些板子就不一會就水過了,然後就看到了最後一題的它 山海經 那乙個上午,我竭盡全力,卻毫無收穫。後來我下午繼續肛還是肛不動,但是mikufun大神,在剛學線段樹的階段,把這道我現在都要...

cogs775 山海經 線段樹

細節巨多 多的狗死人了 首先我們要建出一棵線段樹,這棵線段樹要存放以下幾個東西 最長區間,起點,終點,最長字首,字首終點,最長字尾,字尾起點。所以維護打了足足六十行 查詢打了三十行 如何查詢呢?最長序列無外乎三種情況 1 全在左子樹中。我們設 len i 為 i 節點最長序列,則此時 len i l...

李超線段樹

首先來看一道題 heoi2013 segment 可以發現的是,實質上某個 x k 處的最大值只有乙個,因此我們需要盡可能減少計算不優的線段。那麼對於兩條線段 a,b a ne b 它們左右端點橫座標相同,就只會產生如下四種情況 從特殊情況出發,每次我們都插入一條 1,n 的線段。如果是前兩條情況,...