Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.StringTokenizer
fun countLessThanOrEqual(arr: LongArray, value: Long): Int {
var low = 0
var high = arr.size
var count = 0
while (low < high) {
val mid = low + (high - low) / 2
if (arr[mid] <= value) {
count = mid + 1
low = mid + 1
} else {
high = mid
}
}
return count
}
fun generateSequence(L: Int, x1_in: Long, d1_in: Long, a_in: Long, c_in: Long, m_in: Long): LongArray {
val sequence = LongArray(L)
val d = LongArray(L)
sequence[0] = x1_in
if (L > 0) {
d[0] = d1_in
}
for (i in 1 until L) {
d[i] = (a_in * d[i - 1] + c_in) % m_in
sequence[i] = sequence[i - 1] + d[i - 1]
}
return sequence
}
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
var tokenizer = StringTokenizer(reader.readLine())
val n = tokenizer.nextToken().toInt()
val l = tokenizer.nextToken().toInt()
val sequences = mutableListOf<LongArray>()
repeat(n) {
tokenizer = StringTokenizer(reader.readLine())
val x1 = tokenizer.nextToken().toLong()
val d1 = tokenizer.nextToken().toLong()
val a = tokenizer.nextToken().toLong()
val c = tokenizer.nextToken().toLong()
val m = tokenizer.nextToken().toLong()
sequences.add(generateSequence(l, x1, d1, a, c, m))
}
for (i in 0 until n) {
for (j in i + 1 until n) {
val seq1 = sequences[i]
val seq2 = sequences[j]
var lowMedian: Long = -1_000_000_001L
var highMedian: Long = 1_000_000_001L
var resultMedian: Long = highMedian
while (lowMedian <= highMedian) {
val mid = lowMedian + (highMedian - lowMedian) / 2
val count1 = countLessThanOrEqual(seq1, mid)
val count2 = countLessThanOrEqual(seq2, mid)
val totalCount = count1 + count2
if (totalCount >= l) {
resultMedian = mid
highMedian = mid - 1
} else {
lowMedian = mid + 1
}
}
writer.write(resultMedian.toString())
writer.newLine()
}
}
writer.flush()
}