Слияние отрезков
Даны два отсортированных массива A, B. Нужно обработать запросы следующего вида:
1 l r - Удалить подотрезок A[l, r], добавить его в конец B, и затем отсортировать B.
2 l r - Удалить подотрезок B[l, r], добавить его в конец A, и затем отсортировать A.
Необходимо вывести получившиеся массивы A, B.
Формат входных данных
Первая строка ввода содержит одно целое число N (0 ≤ N ≤ 5*105) - размер массива A.
Вторая строка содержит N целых чисел ai (1 ≤ a1 ≤ a2 ≤ ... ≤ an ≤ 109) - содержимое массива A.
Третья строка ввода содержит одно целое число M (0 ≤ M ≤ 5*105) - размер массива B.
Четвёртая строка содержит M целых чисел bi (1 ≤ b1 ≤ b2 ≤ ... ≤ bm ≤ 109) - содержимое массива B.
Пятая строка ввода содержит одно целое число Q (1 ≤ Q ≤ 9*105) - число запросов.
Следующие Q строк содержат по три целых числа t, l, r (t равно 1 или 2, 1 ≤ l ≤ r) - описание очередного запроса.
Гарантируется, что все запросы корректны, то есть при t = 1 всегда существует A[l, r] и при t = 2 всегда существует B[l, r].
Формат результата
В первой строке вывода должно быть одно целое число N' - итоговый размер массива A.
Во второй строке вывода должны быть N' целых чисел - содержимое итогового массива A.
В третьей строке вывода должно быть одно целое число M' - итоговый размер массива B.
В четвёртой строке вывода должны быть M' целых чисел- содержимое итогового массива B.
Примеры
Входные данные
4
1 3 5 7
5
2 4 6 7 8
5
1 1 1
2 2 4
2 1 3
1 1 7
2 2 5
Результат работы
6
2 3 4 5 7 8
3
1 6 7
Входные данные
1
1
0
1
1 1 1
Результат работы
0
1
1
Примечания
Рассмотрим первый пример из условия:
После первого запроса A = [3, 5, 7], B = [1, 2, 4, 6, 7, 8];
После второго запроса A = [2, 3, 4, 5, 6, 7], B = [1, 7, 8];
После третьего запроса A = [1, 2, 3, 4, 5, 6, 7, 7, 8], B = [];
После четвёртого запроса A = [7, 8], B = [1, 2, 3, 4, 5, 6, 7];
После пятого запроса A = [2, 3, 4, 5, 7, 8], B = [1, 6, 7].
const N = 10;
var a, i, count, z: integer; s:string;
suc: array[1..N] of integer;
begin
Randomize();
count := 0;
z := 1;
for i := 1 to N do begin
a := random(10, 50);
Str(a, s); if s[2] = '4' then begin count += 1; suc[z] := a; z += 1; end;
end;
if count > 0 then begin for i := 1 to z-1 do begin writeln('Выиграшное число: ', suc[i]); end;
Writeln('Всего выиграшных билетов: ', count, ' из ', N); end
else Writeln('Нет ни одного выиграшного билета');
end.
Объяснение:
Как-то так, наверное
Объяснение:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a, x, b, c, D;
cout<<"Введите a: "; cin >> a;
cout<<"Введите b: "; cin >> b;
cout<<"Введите c: "; cin >> c;
D = pow(b,2)-4*a*c;
if(D>0){
cout << "x1 = " << ((-1)*b+sqrt(D))/(2*a)<<endl;
cout << "x2 = " <<((-1)*b-sqrt(D))/(2*a)<<endl;
}
else if(D==0){
cout << "x = " << ((-1)*b)/(2*a)<<endl;
}
else{
D*=(-1);
cout<< "x1 = " << ((-1)*b)/(2*a) <<"+"<< (sqrt(D))/(2*a) << "*i" <<endl;
cout<< "x2 = " << ((-1)*b)/(2*a) <<"-"<< (sqrt(D))/(2*a) << "*i" <<endl;
}
return 0;
}