>>507 ดูแล้วมึงอาจจะไม่แม่น c จะเขียนละเอียดหน่อยๆ
union ใช้ stl มี set ให้ใช้
ทำไว้สองเซ็ต A,B union ก็ insert ของใน B ลง A ก็ได้ จบ ได้ union set แล้ว stl ของ c++ ไม่เก็บค่าซ้ำ และภายในมันเรียงเป็น binary tree ให้เสมอ ใส่ของ1ตัว ก็logn nตัวก็ nlogn
intersect มี A ก็ใช้ iterator ดึงของใน B ทีละตัว มา find ใน A ตัวนี้มีในAมั้ย มีก็ใช่ นี่ก็ nlogn
อีกวิธี
เลขมากสุดได้กำหนดมั้ย ถ้าไม่เกินล้านและไม่เป็นลบใช้ array ดีกว่า เก็บเป็นbitmap เช่นมีเลข 5 ก็ A[5] = 1 ไรงี้ ที่ไม่มีก็ค่า 0 อยู่แล้ว ทีนี้ตอน access จะเร็วล่ะ union ก็ทำ A ไว้ B มาก็ให้เซ็ทมันเป็น 1 ทั้ง B กับ A เลขไหนมีก็เป็น 1 ล่ะ intersect ทำA ไว้ B มาก็ -2 ก็ได้ คราวนี้ตัวซ้ำเป็น -1 ล่ะ วนปริ้นตัวซ้ำ เวลาก็ n
อืมถ้า malloc หรือ new มาอย่าลืมเซ็ทค่าเริ่ม =0 และแนะนำให้ malloc หรือ new เพราะมันไปจองหน่วยความจำใน heap ซึ่งมันใหญ่ มึงจองได้เกินล้านช่องก็ได้(คิดว่านะ) ถ้าประกาศธรรมดาโปรแกรมมันจะไปจองให้ที่ stack จองได้ไม่เยอะ อย่าลืม memory leak (ต้อง)free เมื่อเลิกใช้ด้วย