題目傳送門(感謝vijos的域功能……)
維護點啥?區間加,查詢這兩個貌似是線段樹,可是區間變換φ
\varphi
φ …考慮分塊!維護塊內元素和。
對於查詢操作,查詢整塊和,零散部分暴力,最差為o(t
1n
)o(t_1\sqrt n)
o(t1n
)對於區間加, 設加α
\alpha
α , 則整塊加n
αn\alpha
nα,標記,零散部分暴力, 最差為o(t
2n
)o(t_2\sqrt n)
o(t2n
);對於變換φ
\varphi
φ,可以等差數列維護,零散部分暴力,整塊加dn(
l+r)
2\frac
2dn(l
+r)
,標記,最差為o(t
3n
)o(t_3\sqrt n)
o(t3n
);對於修改和查詢操作,做零散區間前先清除整塊的標記。
因此,總時間複雜度為o(t
n)
o(t\sqrt n)
o(tn)
。本題原創題,如果網上有純屬我沒見過…
本人iq有限,歡迎提出線段樹解法乾掉標程。
#include
#include
#define maxb 1010
#define maxn 1000010
using
namespace std;
int n,t,m,block_num;
int l,r;
long
long d;
int pos[maxn]
;long
long a[maxn]
,sum[maxb]
;long
long add_lazy[maxb]
,phi_lazy[maxb]
;char opt[5]
;inline
intmymin
(int a,
int b)
inline
void
read
(int
&x)while
(ch>=
'0'&&ch<=
'9') x=x*
10+ch-
'0',ch=
getchar()
; x*
=f;return;}
inline
void
read
(long
long
&x)while
(ch>=
'0'&&ch<=
'9') x=x*
10ll
+ch-
'0',ch=
getchar()
; x*
=f;return;}
inline
void
clean
(int x)
inline
void
(int x)
inline
void
(int x)
inline
void
(int x)
inline
void
add(
int left,
int right,
long
long q)
(pos[left]);
(pos[right]);
for(
int i=left;i<=pos[left]
*block_num;i++
) a[i]
+=q,sum[pos[left]]+
=q;for
(int i=
(pos[right]-1
)*block_num+
1;i<=right;i++
) a[i]
+=q,sum[pos[right]]+
=q;for
(int i=pos[left]+1
;i;i++
)return;}
inline
void
phi(
int left,
int right,
long
long d)
return;}
(pos[left]);
(pos[right]);
for(
int i=left;i<=pos[left]
*block_num;i++
)for
(int i=
(pos[right]-1
)*block_num+
1;i<=right;i++
)for
(int i=pos[left]+1
;i;i++
)return;}
inline
long
long
query
(int left,
int right)
(pos[left]);
(pos[right]);
for(
int i=left;i<=pos[left]
*block_num;i++
) res+
=a[i]
;for
(int i=
(pos[right]-1
)*block_num+
1;i<=right;i++
) res+
=a[i]
;for
(int i=pos[left]+1
;i;i++
) res+
=sum[i]
;return res;
}int
main()
for(
int i=
1;i<=m;i++
)clean
(i);
while
(t--
)else
if(opt[0]
=='q'
)else
}return0;
}
事實上,區間加等差數列可以線段樹維護。 斜率優化 決策單調 xjb講課
大佬們要讓蒟蒻給他們講斜率優化 色色發抖 斜率優化是什麼呢,先看點沒用的東西。考慮一類動態規劃,滿足這樣的性質 狀態數有 n 個,乙個狀態的決策數有 n個形似f i i1f j 定義 為亂七八糟的運算 這樣的dp有什麼好的性質呢?首先考慮這樣一種 子型別f i m ini 1j 1 f j w j ...
出題 題解4
由於3比較水略過 這個你只要對所有vi 按p取模,然後排個序,再列舉每個點,按照p vi在陣列上二分即可。有個坑就是二分到的可能是自己,造資料的時候特意卡了一下,不跳的就只有40分。這個你只要考慮每條邊在答案裡的貢獻即可,列舉 v 子樹to 裡黑點的個數 w 然後這條邊的貢獻就是 k w w va ...
調查問卷(狀壓 xjb暴力)
度度熊為了完成畢業 需要收集一些資料來支撐他的論據,於是設計了乙份包含 m 個問題的調查問卷,每個問題只有 a 和 b 兩種選項。將問卷散發出去之後,度度熊收到了 n 份互不相同的問卷,在整理結果的時候,他發現可以只保留其中的一部分問題,使得這 n 份問卷仍然是互不相同的。這裡認為兩張問卷是不同的,...