題意:給出1e5個數 查詢l,r區間內第乙個不能被表示的數
比如1,2,4可以用子集的和表示出[1,7] 所以第乙個不能被表示的是8
題解:先考慮暴力的做法 把這個區間內的數字按從小到大排序後
從前往後掃 當前能表示出[1,x] 假設第i個數字y-1<=x 那麼就可以表示[1,x+y]
如果y > x + 1那麼第乙個不能表示出的數字就是x+1
我們根據這個性質來想 假如當前區間能表示出[1,x] 我們計算這個區間內所有比x小的數的和tmp
如果tmp>x 那麼我們顯然可以表示出[1,tmp] 反之x+1就是答案 直接退出就好
然後就用主席樹來做求和這個東西
#include usingview codenamespace
std;
const
int inf = 1e9 + 5
;const
int maxn = 1e5 + 5
;int
n, cnt;
int sum[maxn << 5
];int ls[maxn << 5], rs[maxn << 5
];int
t[maxn];
int inser(int o, int l, int r, int pos, int
val)
int query(int x, int y, int l, int r, int ql, int
qr)
intmain()
intt;
scanf("%d
", &t);
while(t--)
printf(
"%d\n
", ans);
}return0;
}
主席樹 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 霧 區間求和問題啥的考慮主席樹,首先我不會證明複雜度,是因...
洛谷P4609 FJOI2016 建築師
小 z 是乙個很有名的建築師,有一天他接到了乙個很奇怪的任務 在數軸上建 n 個建築,每個建築的高度是 1 到 n 之間的乙個整數。小 z 有很嚴重的強迫症,他不喜歡有兩個建築的高度相同。另外小 z 覺得如果從最左邊 所有建築都在右邊 看能看到 a 個建築,從最右邊 所有建築都在左邊 看能看到 b ...