Skip to content

Commit 73985ee

Browse files
committed
Codeforces: 1906
2023-2024 ICPC, Asia Jakarta Regional Contest (Online Mirror, Unrated, ICPC Rules, Teams Preferred)
1 parent bc55409 commit 73985ee

File tree

4 files changed

+241
-0
lines changed

4 files changed

+241
-0
lines changed

Codeforces/1906F.cpp

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/**
2+
* @file 1906F.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2024-09-12
5+
*
6+
* @copyright Copyright (c) 2024
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#define endl '\n'
14+
#define maxn 1000005
15+
16+
typedef pair<int, int> pii;
17+
typedef tuple<int, int, int> tiii;
18+
19+
class SegmentTree {
20+
private:
21+
struct Node {
22+
int64_t sum, ansl, ansr, ans;
23+
Node(void) { sum = ansl = ansr = ans = 0; }
24+
Node(int64_t v) { sum = ans = ansl = ansr = v; }
25+
Node operator+(const Node& o) const {
26+
Node ans;
27+
ans.sum = this->sum + o.sum;
28+
ans.ansl = max(this->ansl, this->sum + o.ansl);
29+
ans.ansr = max(o.ansr, o.sum + this->ansr);
30+
ans.ans = max({this->ans, o.ans, this->ansr + o.ansl});
31+
return ans;
32+
}
33+
};
34+
35+
Node tree[maxn << 2];
36+
int n;
37+
38+
void update(int p, int l, int r, int qp, int v) {
39+
if (l == r) return tree[p] = Node(tree[p].sum + v), void();
40+
int mid = (l + r) >> 1;
41+
qp <= mid ? update(p << 1, l, mid, qp, v) : update(p << 1 | 1, mid + 1, r, qp, v);
42+
return tree[p] = tree[p << 1] + tree[p << 1 | 1], void();
43+
}
44+
Node query(int p, int l, int r, int ql, int qr) {
45+
if (ql <= l && r <= qr) return tree[p];
46+
int mid = (l + r) >> 1;
47+
if (qr <= mid) return query(p << 1, l, mid, ql, qr);
48+
if (ql > mid) return query(p << 1 | 1, mid + 1, r, ql, qr);
49+
return query(p << 1, l, mid, ql, qr) + query(p << 1 | 1, mid + 1, r, ql, qr);
50+
}
51+
52+
public:
53+
void resize(int _n) { return n = _n, void(); }
54+
void update(int p, int v) { return update(1, 1, n, p, v); }
55+
int64_t query(int l, int r) { return query(1, 1, n, l, r).ans; }
56+
};
57+
58+
SegmentTree SGT;
59+
vector<pii> ops[maxn];
60+
vector<tiii> ques[maxn];
61+
int a[maxn];
62+
int64_t ans[maxn];
63+
64+
void solve(void) {
65+
int n, m;
66+
cin >> n >> m;
67+
for (int i = 1, l, r, v; i <= m; i++) cin >> l >> r >> v, ops[l].emplace_back(i, v), ops[r + 1].emplace_back(i, -v);
68+
int q;
69+
cin >> q;
70+
for (int i = 1, p, l, r; i <= q; i++) cin >> p >> l >> r, ques[p].emplace_back(i, l, r);
71+
72+
SGT.resize(m);
73+
for (int i = 1; i <= q; i++) {
74+
for (auto [p, v] : ops[i]) SGT.update(p, v);
75+
for (auto [id, l, r] : ques[i]) ans[id] = SGT.query(l, r);
76+
}
77+
for (int i = 1; i <= q; i++) cout << ans[i] << endl;
78+
return;
79+
}
80+
81+
int main() {
82+
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
83+
84+
int _ = 1;
85+
while (_--) solve();
86+
87+
return 0;
88+
}

Codeforces/1906H.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/**
2+
* @file 1906H.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2024-09-12
5+
*
6+
* @copyright Copyright (c) 2024
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#define maxn 200005
14+
#define mod 998244353
15+
16+
int64_t qpow(int64_t a, int64_t x) {
17+
int64_t ans = 1;
18+
while (x) {
19+
if (x & 1) ans = ans * a % mod;
20+
a = a * a % mod, x >>= 1;
21+
}
22+
return ans;
23+
}
24+
int64_t inv(int64_t a) { return qpow(a, mod - 2); }
25+
26+
int A[30], B[30];
27+
int64_t fac[maxn], ifac[maxn], f[30][maxn];
28+
29+
int64_t C(int n, int m) { return fac[n] * ifac[m] % mod * ifac[n - m] % mod; }
30+
31+
void solve(void) {
32+
int n, m;
33+
cin >> n >> m;
34+
string SA, SB;
35+
cin >> SA >> SB;
36+
37+
for (int i = 0; i < n; i++) A[SA[i] - 'A']++;
38+
for (int i = 0; i < m; i++) B[SB[i] - 'A']++;
39+
40+
int64_t base = 1, sum = 0;
41+
for (int i = 0; i < 26; i++) sum += A[i], base = base * C(sum, A[i]) % mod;
42+
43+
f[0][B[0]] = 1;
44+
for (int i = 1; i < 26; i++) {
45+
int64_t sum = 0;
46+
for (int j = B[i - 1]; j > A[i - 1]; j--) sum = (sum + f[i - 1][j]) % mod;
47+
for (int j = 0; j <= min(A[i - 1], B[i]); j++) {
48+
sum = (sum + f[i - 1][A[i - 1] - j]) % mod;
49+
f[i][B[i] - j] = sum * C(A[i - 1], j) % mod;
50+
}
51+
}
52+
int64_t ans = 0;
53+
for (int j = A[25]; j <= B[25]; j++) ans = (ans + f[25][j]) % mod;
54+
cout << ans * base % mod << endl;
55+
return;
56+
}
57+
58+
int main() {
59+
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
60+
61+
fac[0] = ifac[0] = 1;
62+
for (int i = 1; i < maxn; i++) fac[i] = fac[i - 1] * i % mod;
63+
ifac[maxn - 1] = inv(fac[maxn - 1]);
64+
for (int i = maxn - 2; i; i--) ifac[i] = ifac[i + 1] * (i + 1) % mod;
65+
66+
int _ = 1;
67+
while (_--) solve();
68+
69+
return 0;
70+
}

Codeforces/1906J.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* @file 1906J.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2024-09-12
5+
*
6+
* @copyright Copyright (c) 2024
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#define maxn 5005
14+
#define mod 998244353
15+
16+
int a[maxn];
17+
int64_t f[maxn][maxn], g[maxn][maxn], pow2[maxn];
18+
19+
void solve(void) {
20+
int n;
21+
cin >> n;
22+
for (int i = 1; i <= n; i++) cin >> a[i];
23+
24+
f[1][0] = g[1][0] = 1;
25+
26+
for (int i = 2; i <= n; i++) {
27+
for (int j = 1; j < i; j++) {
28+
if (a[i - 1] < a[i]) f[i][j] = f[i - 1][j];
29+
f[i][j] = (f[i][j] + g[i - 1][j - 1]) % mod;
30+
f[i][j] = f[i][j] * pow2[i - j - 1] % mod;
31+
}
32+
for (int j = 1; j < i; j++) g[i][j] = (g[i][j - 1] + f[i][j]) % mod;
33+
}
34+
cout << g[n][n - 1] << endl;
35+
return;
36+
}
37+
38+
int main() {
39+
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
40+
41+
pow2[0] = 1;
42+
for (int i = 1; i < maxn; i++) pow2[i] = pow2[i - 1] * 2 % mod;
43+
44+
int _ = 1;
45+
while (_--) solve();
46+
47+
return 0;
48+
}

Codeforces/1906M.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* @file 1906M.cpp
3+
* @author Macesuted (i@macesuted.moe)
4+
* @date 2024-09-12
5+
*
6+
* @copyright Copyright (c) 2024
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#define maxn 200005
14+
15+
int a[maxn];
16+
17+
void solve(void) {
18+
int n;
19+
cin >> n;
20+
int64_t sum = 0;
21+
for (int i = 1; i <= n; i++) cin >> a[i], sum += a[i];
22+
int64_t ans = sum / 3;
23+
for (int i = 1; i <= n; i++) ans = min(ans, sum - a[i]);
24+
cout << ans << endl;
25+
return;
26+
}
27+
28+
int main() {
29+
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
30+
31+
int _ = 1;
32+
while (_--) solve();
33+
34+
return 0;
35+
}

0 commit comments

Comments
 (0)