Tổng bình phương
Hiếu rất thích làm bài trên Codeforces. Một lần, trong contest Hiếu gặp bài toán như sau: "Cho một dãy số có \(n\) \((n \leq 1000)\) số \(a_1,a_2,\dots,a_n\). Tìm hai chỉ số \(i<j\) sao cho \(a_i+a_j\) lớn nhất. Bạn phải giải bài toán cho \(t\) \((t\leq 10^3)\) trường hợp khác nhau. Biết rằng tổng các số n trong một input không vượt quá \(1000\)". "Quá đơn giản", Hiếu thốt lên và bắt tay ngay vào code thuật toán \(O(n^2)\) đỉnh cao mà anh chỉ tốn \(1000ms\) để nghĩ ra. Ơ mà khoan, mỗi trường hợp là \(n^2\), có \(t\) test, vậy tổng cộng là \(n^2∗t=10^9\) phép tính cơ mà. "TLE mất rồi", Hiếu suy sụp. Hiếu sau đó nghĩ ra được thuật \(O(n)\) và AC dễ dàng. Tuy nhiên, sau khi thử submit lại code \(O(n^2)\), anh lại nhận được dòng chữ AC trong sự ngỡ ngàng. Vì sao vậy? Để đơn giản bài toán, Hiếu đã viết lại đề như sau (các bạn không cần đọc phía trên đâu :)):
Cho hai số nguyên \(n, s\) và dãy số nguyên gồm \(n\) số \(a_1, a_2, \dots , a_n\). Hãy tìm dãy số nguyên \(x_1, x_2, \dots , x_n\) thỏa mãn:
- \(x_1 + x_2 + \dots + x_n \leq s\)
- \(x_i \geq a_i, i=1,2,\dots ,n\)
- \(A = x_1^2 + x_2^2 + \dots + x_n^2\) đạt giá trị lớn nhất
Bạn cần phải tìm giá trị lớn nhất của \(A\). Ngoài ra, bạn phải xử lý \(q\) truy vấn, mỗi truy vấn gồm hai số \(i,x\) và bạn cần update \(a_i=x\). Hãy in ra giá trị lớn nhất của \(A\) sau mỗi lần truy vấn.
Input
- Dòng đầu tiên bao gồm 2 số nguyên \(n, s\).
- Dòng thứ hai gồm \(n\) số nguyên \(a_1, a_2, \dots , a_n\).
- Dòng thứ ba chứa 1 số nguyên \(q\).
- \(q\) dòng tiếp theo, mỗi dòng gồm 2 số nguyên \(i,x\) biểu diễn truy vấn cập nhật \(a_i=x\).
Output
- Hãy in ra \(q+1\) dòng. Dòng đầu chứa kết quả khi chưa thực hiện truy vấn nào, và \(q\) dòng sau chứa kết quả sau khi thực hiện mỗi truy vấn.
Constraints
- \(n \leq 10^5\)
- \(s \leq 10^9\)
- \(0 \leq a_i \leq 10^4\)
- \(q \leq 10^5\)
- \(1 \leq i \leq n\)
- \(0 \leq x \leq s\)
- Dữ liệu đảm bảo \(\sum_{i=1}^{n}a_i \leq s\) tại mọi thời điểm.
Scoring
- Subtask \(1\) (\(20\%\) số điểm): \(q=0, a_i=0, \forall i=1,2,\dots, n\)
- Subtask \(2\) (\(20\%\) số điểm): \(q=0, a_1=a_2=\dots=a_n\)
- Subtask \(3\) (\(20\%\) số điểm): \(n \leq 10^3, q=0\)
- Subtask \(4\) (\(20\%\) số điểm): \(n \leq 10^5, q=0\)
- Subtask \(5\) (\(20\%\) số điểm): \(n \leq 10^5, q \leq 10^5\)
Example
Test 1
Input
3 4
1 1 1
0
Output
6
Note
Chúng ta cần tìm 3 số \(x_1,x_2,x_3\) có tổng bằng 4 và \(x_i \geq 1\). Giá trị lớn nhất bằng \(1^2 + 2^2 + 1^2=6\)
Test 2
Input
3 5
1 1 1
3
1 2
2 2
1 1
Output
11
11
9
11
Bài tập về nhà
Sau một ngày ăn chơi sinh nhật hết mình, Đôn về nhà và liền leo lên giường. Đột nhiên Đôn nhớ lại mình chưa làm bài tập môn Bitwise 101 dành cho trẻ mầm non. Đề bài ấy như sau:
Đề bài
Cho dãy số nguyên không âm \(a_1, a_2, \ldots, a_n\). Ta gọi dãy con liên \([l, r]\) là dãy tốt khi thoả mãn điều kiện sau:
Hay nói cách khác là tổng AND phải lớn hơn tổng XOR của các phần tử trong dãy con. Hãy tìm dãy con liên tiếp là dãy tốt dài nhất.
Đôn vì chơi sinh nhật quá hăng nên giờ chẳng còn tí sức nào để làm bài nữa. Hãy giúp Đôn nhé.
Input
- Dòng đầu tiên chứa số nguyên \(n\) (\(1 \leq n \leq 10^6\)) là số lượng phần tử trong dãy.
- Dòng tiếp theo chứa \(n\) số nguyên \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^6\)) là giá trị của các phần tử trong dãy.
Output
- Một số nguyên duy nhất là độ dài dãy con là dãy tốt dài nhất.
Scoring
- Subtask \(1\) (\(20\%\) số điểm): \(a_i \leq 1\).
- Subtask \(2\) (\(10\%\) số điểm): \(n \leq 10^2\).
- Subtask \(3\) (\(10\%\) số điểm): \(n \leq 10^3\).
- Subtask \(4\) (\(60\%\) số điểm): Không có ràng buộc gì thêm.
Example
Test 1
Input
3
1 0 1
Output
0
Test 2
Input
2
5 6
Output
2
Test 3
Input
6
8 1 3 3 1 2
Output
4
Mã số
Đất nước C11 (láng giềng của đất nước B11) sắp tiến hành cấp \(N\) mã số khác nhau cho \(N\) người dân để tiện việc quản lí. Để việc cấp mã số mang tính dân chủ, mỗi người dân được quyền chọn một số \(max\) và chính quyền sẽ cấp cho người đó một mã số là một số tự nhiên có giá trị từ 1 đến \(max\).
Nhiệm vụ của bạn là đếm xem có bao nhiêu cách cấp mã số khác nhau cho \(N\) người này.
Input
- Dòng 1: Số nguyên dương \(N\).
- Dòng \(i\) trong \(N\) dòng tiếp theo: Số nguyên dương \(max_i\).
Output
- Phần dư khi chia số cách cấp mã số khác nhau cho \(k\). Với \(k\) là số nguyên tố nhỏ nhất lớn hơn \(10^9\).
Constants
- \(1 ≤ N ≤ 10^5\).
- \(1 ≤ max_i ≤ 10^9\).
Example
Test 1
Input
2
1
3
Output
2
Test 2
Input
4
4
4
4
4
Output
24
Note
- Ví dụ 1: Có 2 cách cấp mã số là \({1, 2}\) hoặc \({1, 3}\).
- Ví dụ 2: Số cách cấp mã số là số hoán vị của tập \((1, 2, 3, 4)\).
Du lịch thành phố (NAIPC 2016)
Tại thành phố cây, có \(N\) điểm du lịch hấp dẫn được đánh số từ \(1\) đến \(N\). Thành phố có \(N-1\) con đường \(2\) chiều để nối các điểm du lịch. Thị trưởng thành phố phát hiện ra là việc tổ chức các tour đi từ địa điểm \(u\) đến các địa điểm được đánh số là bội của nó sẽ rất thú vị, các tour như vậy thì du khách sẽ được thăm tất cả các địa điểm trên đường đi đơn giữa 2 địa điểm này. Hỏi với tất cả cách tổ chức tour như vậy thì tổng số địa điểm được thăm là bao nhiêu?
Dữ liệu
- Dòng đầu tiên là số địa điểm du lịch \(N\) của thành phố (\(1≤N≤10^5\))
- \(N-1\) dòng tiếp theo thể hiện đường nối giữa các thành phố
Kết quả
- Ghi tổng số địa điểm du lịch được thăm với tất cả các tour được xây dựng.
Input
10
3 4
3 7
1 4
4 6
1 10
8 10
2 8
1 5
4 9
Output
55
Giải thích: Chúng ta có tất cả các con đường và số địa điểm có thể thăm được như sau:
\(1→2=4 ; 1→3=3; 1→4=2; 1→5=2; 1→6=3;\)
\(1→7=4; 1→8=3; 1→9=3; 1→10=2; 2→4=5;\)
\(2→6=6; 2→8=2; 2→10=3; 3→6=3;\)
\(3→9=3; 4→8=4 ; 5→10=3.\)
Do đó tổng số địa điểm du lịch được thăm sẽ là: \(55\).
Nguồn: CD DHBB 2020