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

Автор dltwecntn, история, 2 года назад, По-английски

Link to the submission: Here. I don't know why it got runtime error when using reference for variable $$$i$$$ (index of the current note in the segment tree in build function).

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

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

Unlucky :(

»
2 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
if (i == 0) {
    i = sz(tr);
    tr.pb(Note(0, 0, 0, 0));
}
...
build(tr[i].left, l, mid);
build(tr[i].right, mid + 1, mid + (1 << len));
build(tr[i].extra, mid + (1 << len) + 1, r);

You do some strange thing, I cannot tell why it should work in first place.

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

ok

»
2 года назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

Can someone help me please ;-;.

  • »
    »
    2 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    if (i == 0) {
        i = sz(tr);
        tr.pb(Note(0, 0, 0, 0));
    }
    ...
    build(tr[i].left, l, mid); // because i is passed as reference it may change value of i and than 
    
    build(tr[i].right, mid + 1, mid + (1 << len)); // when you call this function i can be different than previous
    
»
2 года назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Really interesting, I think the problem is that i sometimes gets trash value after build(tr[i].extra, mid + (1 << len) + 1, r). I don't know why, though. The code looks fine to me actually.