Skip to content

Commit 68cbb08

Browse files
committed
The 4th Universal Cup. Stage 1: Grand Prix of Korolyov
1 parent 263056f commit 68cbb08

File tree

2 files changed

+153
-0
lines changed

2 files changed

+153
-0
lines changed

QOJ/11429.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* @file 11429.cpp
3+
* @author Macesuted ([email protected])
4+
* @date 2025-10-04
5+
*
6+
* @copyright Copyright (c) 2025
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#ifndef LOCAL
14+
#define endl '\n'
15+
#endif
16+
17+
bool mem1;
18+
19+
void solve(void) {
20+
string s;
21+
cin >> s;
22+
for (size_t i = 1; i < s.size(); i++) {
23+
cout << s[i];
24+
if (s[i - 1] != s[i]) cout << s[i - 1];
25+
}
26+
cout << endl;
27+
return;
28+
}
29+
30+
bool mem2;
31+
32+
int main() {
33+
ios::sync_with_stdio(false), cin.tie(nullptr);
34+
#ifdef LOCAL
35+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
36+
#endif
37+
38+
int _ = 1;
39+
while (_--) solve();
40+
41+
#ifdef LOCAL
42+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
43+
#endif
44+
return 0;
45+
}

QOJ/14431.cpp

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
/**
2+
* @file 14431.cpp
3+
* @author Macesuted ([email protected])
4+
* @date 2025-10-04
5+
*
6+
* @copyright Copyright (c) 2025
7+
*
8+
*/
9+
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
#ifndef LOCAL
14+
#define endl '\n'
15+
#endif
16+
17+
bool mem1;
18+
19+
#define maxn 300005
20+
21+
class UnionSet {
22+
private:
23+
int fa[maxn];
24+
25+
int getfa(int p) { return fa[p] == p ? p : fa[p] = getfa(fa[p]); }
26+
27+
public:
28+
void resize(int n) {
29+
for (int i = 1; i <= n; i++) fa[i] = i;
30+
return;
31+
}
32+
void merge(int p, int q) { return fa[getfa(p)] = getfa(q), void(); }
33+
bool isSame(int p, int q) { return getfa(p) == getfa(q); }
34+
};
35+
36+
int64_t ans = 0;
37+
38+
class SegmentTree {
39+
private:
40+
UnionSet US;
41+
42+
vector<int> a[maxn << 2];
43+
bool merged[maxn << 2];
44+
int n;
45+
46+
void insert(int p, int l, int r, int ql, int qr, int v) {
47+
if (ql <= l && r <= qr) return a[p].push_back(v);
48+
int mid = (l + r) >> 1;
49+
if (ql <= mid) insert(p << 1, l, mid, ql, qr, v);
50+
if (qr > mid) insert(p << 1 | 1, mid + 1, r, ql, qr, v);
51+
return;
52+
}
53+
54+
void merge(int p, int l, int r, int qp, int v, int blk = 0) {
55+
if (!merged[p]) {
56+
for (size_t i = 1; i < a[p].size(); i++)
57+
if (!US.isSame(a[p][0], a[p][i])) ans += v, US.merge(a[p][0], a[p][i]);
58+
merged[p] = true;
59+
}
60+
if (!a[p].empty()) {
61+
if (blk && !US.isSame(blk, a[p][0])) ans += v, US.merge(blk, a[p][0]);
62+
blk = a[p][0];
63+
}
64+
if (l == r) return;
65+
int mid = (l + r) >> 1;
66+
return qp <= mid ? merge(p << 1, l, mid, qp, v, blk) : merge(p << 1 | 1, mid + 1, r, qp, v, blk);
67+
}
68+
69+
public:
70+
void resize(int _n, int m) { return n = _n, US.resize(m); }
71+
void insert(int l, int r, int v) { return l <= r ? insert(1, 1, n, l, r, v) : void(); }
72+
void merge(int p, int v) { return merge(1, 1, n, p, v); }
73+
} SGT;
74+
75+
int p[maxn], tp[maxn];
76+
77+
void solve(void) {
78+
int n, m;
79+
cin >> n >> m;
80+
for (int i = 1; i <= n; i++) cin >> p[i], tp[p[i]] = i;
81+
tp[n] = n + 1;
82+
83+
SGT.resize(n + 1, m);
84+
for (int i = 1, l, r; i <= m; i++) cin >> l >> r, SGT.insert(1, l - 1, i), SGT.insert(r + 1, n + 1, i);
85+
86+
for (int i = 0; i <= n; i++) SGT.merge(tp[i], i);
87+
88+
cout << ans << endl;
89+
90+
return;
91+
}
92+
93+
bool mem2;
94+
95+
int main() {
96+
ios::sync_with_stdio(false), cin.tie(nullptr);
97+
#ifdef LOCAL
98+
cerr << "Memory Cost: " << abs(&mem1 - &mem2) / 1024. / 1024. << "MB" << endl;
99+
#endif
100+
101+
int _ = 1;
102+
while (_--) solve();
103+
104+
#ifdef LOCAL
105+
cerr << "Time Cost: " << clock() * 1000. / CLOCKS_PER_SEC << "MS" << endl;
106+
#endif
107+
return 0;
108+
}

0 commit comments

Comments
 (0)