Cevabı bulmak için l ve r ' nin XOR'unu kullanabilirsiniz .
Diyelim ki, l = 4 ve r = 6.
l = 100, r = 110 (bu sayıların ikili eşdeğerleri)
l⊕r = 0 10
Bunun anlamı, aradığınız maksimum değer kesinlikle ilk bitine (MSB) sıfır olarak sahip olacaktır. (Düşünün, maksimum değerinizin ilk bitte 1 olması bile mümkün mü? 01010 ve 00101 olsaydı, xor = 01 111 olurdu, yani 01010 ve 00101 arasındaki maksimum değer kesinlikle bir 1 soldan ikinci bit, bir elde etmek mümkün değildir 1 soldan birinci bit sol yani ikinci bit öncesi)
Böylece, maksimum değeri bulmak için kalan 2 bit ile kalırsınız. Bizde n bit olduğunda mümkün olan maksimum değerin = 2 n −1 olduğunu biliyoruz, bu nedenle bu durumda cevap 2 2 -1 = 4-1 = 3 olacaktır.
Yukarıdaki örnekte, bunun için genel bir algoritma yapabiliriz.
Adım 1. num = maksimumu ( l , r ) temsil etmek için gereken bit sayısı
Adım 2. res = l ⊕ r
Adım 3. pos = ayarlanır birinci bit pozisyonu sol res (0-esaslı indeks)
Adım 4. n = num - konum
Adım 5. ans = 2 n −1
Zaman karmaşıklığı = O (n)
j
kadar devami+1..r
vei
üzerinden çalışmasınıl...r-1
kesin konuşmak gerekirse.