pgiaminh8368's blog

By pgiaminh8368, history, 3 years ago, In English

So I was doing this problem: https://codeforces.net/contest/1490/problem/F. And I got TLE when I use C++11: https://codeforces.net/contest/1490/submission/144339905 . and C++14: https://codeforces.net/contest/1490/submission/144338420 . but AC when using C++20: https://codeforces.net/contest/1490/submission/144339955 . Can anyone tell me why this is happening?

  • Vote: I like it
  • 0
  • Vote: I do not like it

»
3 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by pgiaminh8368 (previous revision, new revision, compare).

»
3 years ago, # |
  Vote: I like it +5 Vote: I do not like it

Change unordered_map to map . Time complexity of unordered_map on average is O(1) but it's worst case complexity is O(n)

https://codeforces.net/contest/1490/submission/144341577

  • »
    »
    3 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thank you.

  • »
    »
    3 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    So that mean access element of a unordered_map is faster in C++20?

    • »
      »
      »
      3 years ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      This is a problem from a Div3 contest, which means that this contest had a 12 hours hacking phase. And unordered_map is known to be vulnerable to adversarially constructed input data, which may hit the worst case time complexity. C++20 isn't better. It's just a newer complier, which probably changed its unordered_map implementation a little a bit. So the old hacks need to be adjusted to successfully target it too. See https://codeforces.net/blog/entry/62393