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

Автор AM51, 11 лет назад, По-английски

http://codeforces.net/contest/281/problem/D

can somebody suggest an approach to this problem

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

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

i looked at that can u please explain what is happening

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

    for each number in the sequence A[i],

    We define: MaxRight[i] = r ... where r is the smallest index where A[r]>A[i] and r>i

    Also MaxLeft[i] = l ... where l is the largest index where A[l]>A[i] and l<i

    If we checked the intervals [i,r] (A[r] XOR A[i]) , [l,i] (A[l] XOR A[i]) and [l,r] (A[l] XOR A[i]) for each index i ... We will cover all possible answers for any interval.

    Now we need to find an efficient way to compute MaxRight[i] and MaxLeft[i]

    For Computing MaxLeft[i] ... I'll check A[i-1] ...

    if A[i-1] > A[i] ... Then, MaxLeft[i]=i-1

    else ... we will need to check A[MaxLeft[i-1]] (Previously computed value)

    Till we find the first maximum to the left.

    The Same strategy can be done for MaxRight[i] ... but we will need to check A[i+1] instead and we will compute the values in reversed order.