Bzoj4408 神秘數(主席樹)

2022-03-07 06:09:35 字數 919 閱讀 1990

乙個可重複數字集合s的神秘數定義為最小的不能被s的子集的和表示的正整數。

例如s=,

1 = 1

2 = 1+1

3 = 1+1+1

4 = 4

5 = 4+1

6 = 4+1+1

7 = 4+1+1+1

8無法表示為集合s的子集的和,故集合s的神秘數為8。

現給定n個正整數a[1]..a[n],m個詢問,每次詢問給定乙個區間l,r,求由a[l],a[l+1],…,a[r]所構成的可重複數字集合的神秘數。

對於100%的資料點,n,m <= 100000,∑a[i] <= \(10^9\)

若當前神秘數為ans,那麼[1,ans-1]都可以表示出來

如果當前加入乙個數字a,分兩種情況

若a<=ans,區間變為[1,ans+a-1],然後神秘數變成ans+a

若a>ans,ans不變

ans從1開始計算,每次計算小於ans的數的和sum,然後ans更新為sum+1

#include #include #define n 100010

using namespace std;

int n,m,a[n],rank[n],tot,t[n],ls[n*40],rs[n*40],s[n*40],ans,sum;

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}void update(int last,int p,int l,int r,int &rt)

int query(int ss,int tt,int l,int r)

int main()

printf("%d\n",ans);

} return 0;

}

主席樹 FJOI2016 神秘數

展開 題目描述 乙個可重複數字集合s的神秘數定義為最小的不能被s的子集的和表示的正整數。例如s 1 1 2 1 1 3 1 1 1 4 4 5 4 1 6 4 1 1 7 4 1 1 1 8無法表示為集合s的子集的和,故集合s的神秘數為8。現給定n個正整數a 1 a n m個詢問,每次詢問給定乙個區...

FJOI2016 神秘數 主席樹

明白之後 5min 就寫好了 自閉 這題的題意是問你 l,r 區間的數字不能構成的數字的最小值 首先考慮 如果 1,x 可以被表示 那麼加入乙個 a i 顯然 1,x a i 都可以被表示 有什麼好辦法呢 當然有 o q sum r l 1 霧 區間求和問題啥的考慮主席樹,首先我不會證明複雜度,是因...

P4587 FJOI2016 神秘數 主席樹

題意 給出1e5個數 查詢l,r區間內第乙個不能被表示的數 比如1,2,4可以用子集的和表示出 1,7 所以第乙個不能被表示的是8 題解 先考慮暴力的做法 把這個區間內的數字按從小到大排序後 從前往後掃 當前能表示出 1,x 假設第i個數字y 1 x 那麼就可以表示 1,x y 如果y x 1那麼第...