câu cuối tầm 1k, tính thêm mấy a TQ chắc tầm 1k5 đó bácQ4 nãy mấy người giải đc v mấy bác
Khoảng 10p cuối lag luôn..Mà nay lag vãi, submit mãi mới ăn được. Khả năng cao hôm nay lại không tính điểm
Trùng ý tưởng với mình này.Q3 em tưởng cách O(10^5 * 10^3) ăn TLE, ai dè vẫn accept. Em dùng counter2 đếm số phần tử n2 * k. Tìm các ước k của n1 rồi cộng dồn counter2[k] vào kết quả thôi. Có thể dùng mảng counter1 để lưu các n1 đã tính từ trước đó.

#define ll long long
const int MOD = 1e9 + 7; // 998244353;
const int N = 2e5 + 5;
const ll INF = 1e16;
ll a[N];
struct SegTree
{
ll st[4 * N][4];
SegTree(int init_size)
{
build(1, init_size, 1);
}
ll get_mx(int id) {
return max({st[id][0], st[id][1], st[id][2], st[id][3]});
}
void merge(int lid, int rid, int id)
{
st[id][0] = max(st[lid][0] + st[rid][2], st[lid][1] + max(st[rid][2], st[rid][0]));
st[id][1] = max(st[lid][0] + st[rid][3], st[lid][1] + max(st[rid][1], st[rid][3]));
st[id][2] = max(st[lid][2] + st[rid][2], st[lid][3] + max(st[rid][2], st[rid][0]));
st[id][3] = max(st[lid][2] + st[rid][3], st[lid][3] + max(st[rid][1], st[rid][3]));
}
void build(int l, int r, int id)
{
if (l == r)
{
st[id][0] = max(a[l], 0LL);
for (int i = 1; i < 4; i++) st[id][i] = 0;
return;
}
int mid = (l + r) / 2;
build(l, mid, id << 1);
build(mid + 1, r, id << 1 | 1);
merge(id << 1, id << 1 | 1, id);
}
void update(ll val, int u, int v, int l, int r, int id)
{
if (v < l || u > r)
{
return;
}
if (l == r)
{
st[id][0] = max(val, 0LL);
return;
}
int mid = (l + r) / 2;
update(val, u, v, l, mid, id << 1);
update(val, u, v, mid + 1, r, id << 1 | 1);
merge(id << 1, id << 1 | 1, id);
}
};
class Solution {
public:
int maximumSumSubsequence(vector<int>& nums, vector<vector<int>>& queries) {
int ans = 0;
int n = nums.size();
for (int i = 1; i <= n; i++){
a[i] = nums[i-1];
}
SegTree st = SegTree(n);
for (auto query: queries) {
int val = query[1], pos = query[0] + 1;
st.update(val, pos, pos, 1, n, 1);
ans = (ans + st.get_mx(1)) % MOD;
}
return ans;
}
};

e cũng tính lên núi tu nhưng tuần sau weekly 400 số đẹp quá, phong thủy có nên tham gia koNói chung vẫn kém quá, mấy Q4 - 8pts auto toang. Lên núi tu tiếp vậy![]()

Tu nhưng vẫn phá giới được màe cũng tính lên núi tu nhưng tuần sau weekly 400 số đẹp quá, phong thủy có nên tham gia ko![]()

Q3 có ae nào làm với O(n*log(n)) chưa.Q3 em tưởng cách O(10^5 * 10^3) ăn TLE, ai dè vẫn accept. Em dùng counter2 đếm số phần tử n2 * k. Tìm các ước k của n1 rồi cộng dồn counter2[k] vào kết quả thôi. Có thể dùng mảng counter1 để lưu các n1 đã tính từ trước đó.
bài 4 tụi nó ko giải bằng segment tree vẫn pass ầm ầm, cheaters tùm lumCách bác nói là dùng sàng nguyên tố để phân tích n1 thành các thừa số nguyên tố để tìm nhanh các ước nhỉ. Tại em lướt qua solutions thấy toàn O(n*sqrt(n)).Q3 có ae nào làm với O(n*log(n)) chưa.
Xem qua mấy ông đứng top làm thì cũng vẫn là O(n*sqrt(n))
Q3 có ae nào làm với O(n*log(n)) chưa.
Xem qua mấy ông đứng top làm thì cũng vẫn là O(n*sqrt(n)).
class Solution:
def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:
numCounter = Counter(num for num in nums1 if num % k == 0)
productCounter = Counter(num * k for num in nums2)
maxNum = max(numCounter.keys(), default=0)
ans = 0
for product, productCount in productCounter.items():
for cand in range(product, maxNum + 1, product):
if cand in numCounter:
ans += numCounter[cand] * productCount
return ans