#ifdef LOCAL #define _GLIBCXX_DEBUG #define __clock__ #else #pragma GCC optimize("Ofast") #endif
- 私のコードは上記を定義している。基本的に便利だが、困ることもある
- 以前、_GLIBCXX_DEBUGが有効だとpriority_queueが遅いことにハマったことがある
- 今回はソート済みの配列Aをlower_boundするときも同様に遅くなることに出くわした
- 具体的にはN=100000ほどのデータで2秒では終わらなくなる
_GLIBCXX_DEBUG使ってるとlower_boundも遅くなる。下記を見ると、配列がソート済みかをチェックするからO(N)になるのだろう https://t.co/XB5eyGxWeB
— peroon_cp💧 (@peroon_cp) December 29, 2020
コンテスト中に「なぜか遅い!?」時にすべきムーブ
- 上記問題と出くわしたのはコンテスト外だったので助かった。コンテスト中だったら焦る
- ローカルだけの問題だと断定するために、AtCoderのコードテストにコードとN=100000のデータを入力し、TLEしないことを確認する
- または_GLIBCXX_DEBUGを消す(これは1度出会ってないと無理だろう)