51NOD1981 如何愉快地和STL玩耍?

2022-05-12 04:48:13 字數 1855 閱讀 1505

驢蛋蛋在愉快地與stl玩耍

突然間小a跳了出來對驢蛋蛋說,看你與stl玩的很開心啊,那我給你乙個大小為n的vector,這個vector上每個位置上是乙個set,

每次我會在閉區間 [l,r] 中的每個set裡插入乙個數c,或者詢問 [l,r] 區間所有set裡所有數拿下來排序之後的嚴格第k小,現在你還開心嗎,紅紅火火恍恍惚惚韓寒會畫紅槐花!!!!

小a走了,留下驢蛋蛋乙個人外加乙個長度為 n 的vector>在風中凌亂,你能幫驢蛋蛋解除凌亂嗎?

根據小a的 c++2.33 標準vector可以被視作乙個陣列,下標從 1 開始,大小不得超過65536

set是乙個集合,其中的數不得超過 10000 並且會被自動去重

小a最多會進行q 次(不超過 65536)完全符合 c++2.33標準的操作,但如果出現詢問時[l,r]區間裡不足k個數的情況,你只需要對小a回答−1就好了

傳說中的毒瘤題?線段樹+永久延遲標記+二分+bitset

空間不夠,被逼寫了一次非結構體線段樹,這樣只用開兩倍了。

bitset以前寫到過一次,stl黑科技。bitset的第i位為1表示i這個數在這個結點的集合裡。

二分之前先查詢一次,把查詢區間的數都染成1。

為助於理解,把pre陣列列印出來了,二分的原理應該也很明顯了吧?

10000000000

11000000000

11100000000

11110000000

11111000000

11111100000

11111110000

11111111000

11111111100

11111111110

11111111111

#includeusing

namespace

std;

#define n 10010

#define m 65540

#define lc (p<<1)

#define rc (p<<1|1)

struct

email

t[m*2

];int

n,q,k,ql,qr,op,cnt;

bitset

ans[m],pre[n],tmp;

inline

void update(int p,int l,int

r)

int mid=l+r>>1

;

if(ql<=mid)update(lc,l,mid);

if(qr>mid) update(rc,mid+1

,r);

}inline

void query(int p,int l,int

r) ans[cnt]|=t[p].lazy;

int mid=l+r>>1

;

if(ql<=mid)query(lc,l,mid);

if(qr>mid) query(rc,mid+1

,r);

}inline

int check(int

mid)

inline

void

solve()

cnt++;query(1,1

,n);

if(ans[cnt].count()"

-1");return

;}

int l=0,r=n-2

,ans,mid;

while(l<=r)

printf(

"%d\n

",ans);

}int

main()

return0;

}

51nod 1981 如何愉快地與STL玩耍

驢蛋蛋在愉快地與stl玩耍 突然間小a跳了出來對驢蛋蛋說,看你與stl玩的很開心啊,那我給你乙個大小為n的vector,這個vector上每個位置上是乙個set,每次我會在閉區間 l,r 中的每個set裡插入乙個數c,或者詢問 l,r 區間所有set裡所有數拿下來排序之後的嚴格第 k 小,現在你還開...

51nod 貪心入門

有若干個活動,第i個開始時間和結束時間是 si,fi 活動之間不能交疊,要把活動都安排完,至少需要幾個教室?分析 能否按照之一問題的解法,每個教室安排盡可能多的活動,即按結束時間排序,再貪心選擇不衝突的活動,安排乙個教室之後,剩餘的活動再分配乙個教室,繼續貪心選擇 反例 a 1,2 b 1,4 c ...

51nod 迷宮問題

1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...