20191030 csp s模擬T1(三維偏序)

2021-09-29 04:30:19 字數 2390 閱讀 9175

(woj4780)

【題目描述】

給定兩個長度為n

nn的序列a,b

a,ba,

b。你需要選擇乙個區間[l,

r]

[l,r]

[l,r

],使得al+

…+ar

≥0

a_l+…+a_r\ge 0

al​+…+

ar​≥

0且bl+…

+br≥

0b_l+…+b_r\ge 0

bl​+…+

br​≥

0。最大化你選擇的區間長度。

【輸入資料】

第一行乙個整數n

nn,第二行n

nn個整數a1a

na_1~a_n

a1​an​

,第三行n

nn個整數b1b

nb_1~b_n

b1​bn​

。【輸出資料】

一行乙個整數表示max

(r−l

+1

)max(r-l+1)

max(r−

l+1)

。保證至少有乙個區間滿足條件。

【樣例輸入】

52 -4 1 2 -2

-2 3 1 -3 1

【樣例輸出】

1【資料範圍】

對於20%的資料,n

≤5000

n\le 5000

n≤5000

。對於60%的資料,n≤1

05

n\le 10^5

n≤105。

對於100%的資料,1≤n

≤5×1

05,∣

ai∣,

∣bi∣

≤109

1\le n\le 5\times 10^5,|ai|,|bi|\le 109

1≤n≤5×

105,

∣ai∣

,∣bi

∣≤10

9。資料有一定梯度。

【提示】

本題輸入規模較大,下發檔案中提供了輸入優化,大家可以自行選擇是否使用。

思路:三維偏序。

求a ,b

a,ba,

b的字首和,發現區間[i,

j]

[i,j]

[i,j

]滿足sum

ja−s

umi−

1a≥0

,sum

jb−s

umi−

1b≥0

時sum^a_j-sum^a_\ge 0,sum^b_j-sum^b_\ge 0時

sumja​

−sum

i−1a

​≥0,

sumj

b​−s

umi−

1b​≥

0時,可取。

則以s um

ia

sum^a_i

sumia​

為第一關鍵字,位置為第二關鍵字排序。以sum

ib

sum^b_i

sumib​

做下標,位置做值,用樹狀陣列維護。

**:

#include

using

namespace std;

#define in read()

#define ll long long

#define re register

inline

charch(

)inline ll in

const ll a=

5e6+5;

ll n;

ll a[a]

,b[a]

;ll sum_a[a]

,sum_b[a]

;ll res=0;

struct make

}p[a]

;inline

void

lsh(

)ll tree[

2*a]

;inline ll lowbit

(ll x)

inline

void

add(ll w,ll v)

return;}

inline ll find

(ll w)

return ans;

}inline

void

scan()

for(re int i=

1;i<=n;

++i)

n++;}

inline

void

work()

printf

("%lld"

,res);}

signed

main()

csp s模擬測試94

一場簡單題,打爆了。t1 腦抽分解質因數準備分子分母消,想了半天發現 jb 互質直接上天,果斷碼了高精滾蛋。t2 無腦手玩大樣例,突然靈光一閃想到對映到前 k 大小的區間,t3 寫完暴力準備划水,突然發現特殊性質可寫,10 分鐘拯救了 25 分。8003 24 46 7003 24 58 6503 ...

csp s模擬測試93

自閉場。t1 想到 cdq 因為複雜度少看見乙個 0 打了半年還用了 sort 直接廢掉,t2 t3 直接自閉暴力分都沒有。考場太慌了,心態不好。8002 07 34 003 12 11 0 03 11 53 8003 12 11 沒有前途就是垃圾趁早滾回實驗二安度晚年吧。cdq 不接受反駁。最簡單...

csp s模擬測試90

考場發明 spfa 祭。t1 按照題意模擬,然後我就發現我死了。一氣之下刪掉了 priority 拍了幾下發現賊jb快而且還是對的就開心地交了。t2 的差分狀態定義很棒然後就調了一場考試,t3 死亡暴力沒拿到分。100 00 38 16 100 03 11 10 0 03 15 44 20003 1...