l = begin + 1;
while (l <= r)
{
int i = q.top().i, j = q.top().j;
q.pop();
if (j < n)
q.push({i, j + 1});
cout << a[i] + b[j] << " ";
l++;
}
for (int k = begin + 1; k <= r; k++)
{
int i = q.top().i, j = q.top().j;
q.pop();
if (j < n)
q.push({i, j + 1});
cout << a[i] + b[j] << " ";
}
整个程序的时间复杂度为 O(nlogn),以上是其中的一个部分。用前者能轻松跑过 n=106,用后者连 n=105 都会 TLE。
太抽象了,实在看不懂,有没有大佬能解释一下原理?题目保证 r 与 begin 的差不大于 105。