乙個可重複數字集合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那麼第...