XJB出題 分塊 籃球架

2021-08-02 01:26:25 字數 3167 閱讀 9877

題目傳送門(感謝vijos的域功能……)

維護點啥?區間加,查詢這兩個貌似是線段樹,可是區間變換φ

\varphi

φ …考慮分塊!維護塊內元素和。

對於查詢操作,查詢整塊和,零散部分暴力,最差為o(t

1n

)o(t_1\sqrt n)

o(t1​n

​)對於區間加, 設加α

\alpha

α , 則整塊加n

αn\alpha

nα,標記,零散部分暴力, 最差為o(t

2n

)o(t_2\sqrt n)

o(t2​n

​);對於變換φ

\varphi

φ,可以等差數列維護,零散部分暴力,整塊加dn(

l+r)

2\frac

2dn​(l

+r)​

,標記,最差為o(t

3n

)o(t_3\sqrt n)

o(t3​n

​);對於修改和查詢操作,做零散區間前先清除整塊的標記。

因此,總時間複雜度為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 份問卷仍然是互不相同的。這裡認為兩張問卷是不同的,...