Một tập hợp các hàm bậc nhất được duy trì trong suốt quá trình xử lý. Mỗi hàm có dạng f(x)=a⋅x+b, trong đó a và b là các số nguyên. Ban đầu tập hợp đã có n hàm.
Có q thao tác được thực hiện theo thứ tự:
0ab: thêm hàm f(x)=a⋅x+b vào tập hợp;
1x: tìm giá trị nhỏ nhất của f(x) trong tất cả các hàm đang có.
Tập hợp luôn không rỗng khi một thao tác loại 1 được thực hiện.
Input
Dòng đầu chứa hai số nguyên n và q.
n dòng tiếp theo, mỗi dòng chứa hai số nguyên a và b, mô tả một hàm ban đầu.
q dòng cuối mô tả các thao tác theo đúng định dạng ở trên.
Output
Với mỗi thao tác loại 1, in ra một dòng chứa giá trị nhỏ nhất tìm được.
Constraints
1≤n,q≤2⋅105.
∣a∣,∣x∣≤109.
∣b∣≤1018.
Mọi đáp án nằm trong miền của số nguyên 64-bit có dấu.
Scoring
Subtask 1 (50% số điểm): n,q≤60.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
2 5
2 5
-1 8
1 0
0 1 -3
1 4
1 -2
1 3
Output
5
1
-5
0
Giải thích: Tại x=0, hai hàm ban đầu cho giá trị 5 và 8. Sau khi thêm x−3, các giá trị nhỏ nhất tại x=4,−2,3 lần lượt là 1,−5,0.
Lời giải tóm tắt
Ý tưởng: Mỗi hàm được xem như một đường thẳng. Ta thu thập trước mọi hoành độ xuất hiện trong truy vấn, sắp xếp và loại trùng. Trên tập tọa độ này, cây Li Chao lưu tại mỗi nút một đường đang tốt nhất ở trung điểm. Khi chèn đường mới, so sánh ở đầu trái và trung điểm để biết phần còn có thể thắng nằm ở nhánh nào. Một truy vấn đi theo đường từ gốc tới lá và lấy giá trị nhỏ nhất trong các đường gặp được.
Ý tưởng: Tính đúng đắn theo bất biến: sau mỗi lần chèn, với mọi hoành độ trong miền của một nút, đường tốt nhất giữa các đường đã xử lý hoặc nằm ngay tại nút, hoặc nằm trong đúng nhánh mà thuật toán tiếp tục chèn. Vì truy vấn lấy minimum trên toàn bộ đường gốc-lá, nó xét đủ ứng viên có thể tối ưu tại hoành độ đó.
Ý tưởng: Độ phức tạp: O((n+q) log q) thời gian và O(q) bộ nhớ.