分治 Jzoj P5807 簡單的區間

2022-09-18 00:54:13 字數 1029 閱讀 8205

description

input

第一行兩個正整數 n 和 k 。

第二行包含 n 個正整數,第 i 個正整數表示 ai。

output

一行乙個正整數,表示答案。

sample input

【樣例 1 輸入】

4 31 2 3 4

【樣例 2 輸入】

4 24 4 7 4

sample output

【樣例 1 輸出】

3【樣例 2 輸出】

6

data constraint

對於 30% 的資料,n ≤ 3000;

對於另外 20% 的資料,數列 a 為隨機生成;

對於 100% 的資料,1 ≤ n ≤ 3 × 10^5 , 1 ≤ k ≤ 10^6 , 1 ≤ ai ≤ 10^9。

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;

7int n,k,tot,a[300010],d[1000010][2],pos[300010],mx[300010],sum[300010];8

long

long

ans;

9void doit(int l,int

r)10

21 mx[tot+1]=r+1;22

int p=1,k1=mid+1,mxl=0,suml=0;23

for (int i=mid;i>=l;i--)

2432

for (int i=mid+1;i1]--;

33for (int i=k1;i<=r;i++) d[(sum[i]-a[pos[i]]%k+k)%k][0]--;

34 doit(l,mid),doit(mid+1

,r);35}

36int

main()

37

簡單的分治策略

簡單的分治策略 分治,是程式設計中常用的一種策略,例如在歸併排序中就有使用。分治策略是一種遞迴求解問題的方法,在每層的遞迴中可分為三個步驟 分解 divide 解決 conquer 合併 combine 分解 divide 指的是將問題劃分為一些子問題,子問題與原問題具有相同的形式,但規模較之更小。...

分治演算法的簡單應用

1.要求2n個數的中位數,採用分治策略。每次劃分後,都會去掉一半的數,只剩原來一半的數。遞推關係式為 t n t n 2 o 1 由master定理,可得時間複雜度為o logn include include define n 1000000 using namespace std int a n...

簡單的緩衝區溢位

這是乙個簡單的緩衝區溢位程式,是我在oday上面學到的,嘿嘿嘿,每個人寫的shellcode不一樣所以實現的目的也不一樣。大家自由發揮吧。include include include include define password 1234567 int verify password char ...