(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
a1an
,第三行n
nn個整數b1b
nb_1~b_n
b1bn
。【輸出資料】
一行乙個整數表示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...