Пожалуйста, подпишитесь на официальный канал Codeforces в Telegram по ссылке https://t.me/codeforces_official. ×

Блог пользователя mihajlovskijr

Автор mihajlovskijr, история, 3 месяца назад, перевод, По-русски

Очень большая часть времени сегодняшнего контеста была потрачена мной на попытки сделать моё решение задачи E быстрее, несмотря на то, что оно должно иметь сложность O($$${n^2}logn$$$), которая при n <= 5000 должна проходить за 3 секунды. Единственное, что мне помогло, это изменение long long на int, но даже так оно осталось очень медленным. Есть ли у кого-то идеи почему моё решение задачи E такое медленное (снизу финальный код)? И подобный вопрос про задачу D, потому что я не вижу ни одной причины почему оно такое медленное:

E: 255741981
D: 255675779

Извините за внешний вид кода в решении E, я не знаю почему он сместился, потому что когда он отправлялся всё было в порядке.

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

»
3 месяца назад, # |
  Проголосовать: нравится +11 Проголосовать: не нравится

I think in problem D it was better to use an unordered map.

  • »
    »
    3 месяца назад, # ^ |
      Проголосовать: нравится +16 Проголосовать: не нравится

    Unordered map can cause your code to give TLE due to antihashing tests (O(n) instead of O(1)). Yes, it is possible to use unordered_map without worrying about it, but I hadn't the prewritten code needed for it

»
3 месяца назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

In problem E: You use ordered_set which is slow, you can use Fenwick tree

  • »
    »
    3 месяца назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    I thought that it should be pretty fast. I suppose it has a large constant then? Because the complexity of all operations of ordered_set should be O(logn)

»
3 месяца назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

E can be solved in O(n^2), checking every k from n to 1 in O(n).

»
3 месяца назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

D is solvable with zipped/global array with faster: 255734995

E is solvable with difference array in $$$O(n^2)$$$: 255678366

  • »
    »
    3 месяца назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Oh, well, yeah, these are pretty smart optimizations, and I didn't think about them at first. Thank you!

»
3 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Fallen C :(

»
3 месяца назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Use a Fenwick Tree instead of an ordered set for E. Ordered set has a pretty high constant factor, which (I'm assuming) is why you TLE'd.

  • »
    »
    3 месяца назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    Actually, you do not need neither ordered set nor fenwick tree. Look at this.

    • »
      »
      »
      3 месяца назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      Oh this is a nice approach. Definitely cleaner than abusing a Fenwick tree on this problem like I did.

»
3 месяца назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

D: Use array size of $$$ 10^{6}$$$ ,to clean array just do for with in $$$O(n+m)$$$

E: simple scanline

»
3 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

The code is shifted, because for indentation you use spaces and tabs interchangeably, and length of tabs in you IDE and on Codeforces is not the same. Better set in your IDE "always use spaces for indentation".

  • »
    »
    3 месяца назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    I never used tabs in my IDE, the only thing I've done with this particular code whas editing inside the codeforces send code window.. Maybe this added them