# debug ### 採雷重點 1. size()的返回值不能做運算 (x) l.size()-r.size() 3. 如果要做位元運算把(1<<40)放入long long裡,要把1改成1LL,因為只有數字的話型別為int 4. 如果要把int運算完後的值放到long long裡要轉型=> ans=(long long)a*b 5. runtime error!=TLE,可能為陣列越界,除0,非法記憶體存取,stack overflow 6. 寫這樣比較快 變數名稱.lower_bound(要找的value); 7. 有些資料結構要用multiset 必免重覆元素被覆蓋掉 8. 初始化mi要用INT_MAX or LLONG_MAX,1e9有可能不夠大 9. 能不用初始化就不用memset,避免TLE,或改為在讀測資的時候順便初始化 10. 位元運算的優先程度很低,所以只要有關位元運算都要括號 12. 特殊資料結構(set,pq)有時不一定比vector+sort好 13. 陣列用到超過邊界的格子不會提示,要自己注意邊界 14. 如果陣列要開3*10^6話就不要define int long long,不然會開不下 15. STL存取元素的數量都有上限,超過會爆,盡量用陣列取代 16. 如果整數型態是long long的話要改成printf("%lld") 17. 浮點數沒有顯示出來的位數不代表是0,盡量不要直接賦值上去,改為賦值算式上去 18. 有多組測資時要記得初始化!! 19. 狀態轉移初始化時,不合法的狀態要設為inf 20. 能不用map去做映射就不要用,用一般陣列計數就好,否則有可能會TLE 21. 線段樹寫if(Lb <= l && r <= Rb) return seg[node]; 比 if((l == Lb && r == Rb) || l==r) return seg[node]; 快 22. 在函式中交換值時,要記得用&取本尊 23. 陣列最大值要注意!!!很重要!!!有可能會TLE 24. 線段樹在query中的回傳值,要注意狀態,要跟built的狀態一樣,相乘就要記得是相乘 25. 元素相乘取餘數不可蓋前綴和,如果元素相乘沒有取餘數可以蓋前綴和,區間[l,r]=pre[r]/pre[l-1] 26. 二分搜時要注意右界大小,有可能(l+r)時溢位,或太小沒搜到答案 27. 函數pow會回傳浮點數,如果後面有運算式都會變成浮點數運算,輸出時要注意型態,免得cout顯示科學記號而WA 28. vector int mp[MAXN],盡量開在globle,否則可能會seg fault 29. 變數沒用到的就不要宣告,免得mid打成m卻不知道錯哪 30. 次方不能取模 31. define ing long long時,1要寫1LL 32. 數值相減時要注意大減小才會是絕對值 33. 拓譜排序時,node放進去queue的條件為if(- -task[now]==0),注意"==0" 34. dp top-down時初始化要為-1,避免TLE 35. priority_queue TLE時可以改用單調對列(deque)優化 36. struct的空間比較大,MLE時可以考慮把裡面的元素拆出來各自宣告 37. 線段樹要開到SIZE*4才夠用 38. 負數區間取mid要用l+(r-l)/2 39. 李超線段樹動態開點查詢時如果是NULL要返回-INF 40. 計數的變數不能取模 41. 宣告太大的陣列會耗太多時間,可能導致TLE 42. 當題目有取餘數時,要記得先+mod再%mod,避免出現負數 43. long long 位運算要記得用1ll 44. 變數有可能減到負數的情況下,不能使用while(variable),會TLE 45. 巢狀迴圈遍歷的變數不能一樣,否則會衝突 46. C的FIFO讀檔有坑,結尾可能有兩個字元