GreatRevan's blog

By GreatRevan, history, 12 months ago, In English

I thought unordered_set was faster because it doesn't need to deal with sorting.

I got accepted for problem C on a recent Div.3 contest, but it returned as TLE on test 17 after contest finished and I lost 52 points. You know what's funny? When you replace unordered_set with normal set, it gives accepted (sorting ability of normal set doesn't help you for this problem)

Code with unordered_set (TLE on test 17): https://mirror.codeforces.com/contest/2106/submission/317003071

Same code with normal set (Accepted): https://mirror.codeforces.com/contest/2106/submission/317364054

  • Vote: I like it
  • -4
  • Vote: I do not like it

| Write comment?
»
12 months ago, hide # |
 
Vote: I like it 0 Vote: I do not like it

It’s due to hash attacks. You can mitigate this by using a custom hasher.

»
12 months ago, hide # |
 
Vote: I like it +3 Vote: I do not like it

Yes'nt. In theory, unordered set's operations are much faster than set(1 vs logn). Butt, due to collision, sometimes unordered_set operation can take up to O(n). Check this blog