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

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

You have a sequence of numbers named a. You need to perform 2 queries :

  1. Add x to all elements lie in range [L, R]

  2. Ask for gcd(aL,aL + 1...aR)

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

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

gcd(aL, aL + 1, ..., aR) = gcd(aL, aL + 1 - aL, ..., aR - aR - 1).

Then use segment tree and in every vertex keep aL, aR and gcd(aL + 1 - aL, ..., aR - aR - 1). It seems to be enough to perform both queries.

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

You can also keep two values aL and gcd(aL + 1 - aL, aL + 2 - aL, ..., aR - aL) in segment tree.
(It uses the fact that gcd(aM + 1 - aL, X - aM + 1) = gcd(aM + 1 - aL, X - aL))

»
10 лет назад, скрыть # |
Rev. 2  
Проголосовать: нравится -29 Проголосовать: не нравится

I am solving this (https://www.codechef.com/problems/DGCD) question using HLD and I am getting TLE Here's my code (https://ideone.com/aUlGTZ)