P4587 FJOI2016 神秘數 主席樹

2022-05-09 01:21:12 字數 894 閱讀 5957

題意:給出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 using

namespace

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;

}

view code

主席樹 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 ...