Skip to content

Commit fe10b5c

Browse files
committed
ehehe
1 parent 725e369 commit fe10b5c

File tree

189 files changed

+339045
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

189 files changed

+339045
-0
lines changed
+151
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
#include <bits/stdc++.h>
2+
#include <ext/pb_ds/assoc_container.hpp>
3+
#include <ext/pb_ds/tree_policy.hpp>
4+
using namespace std;
5+
using namespace __gnu_pbds;
6+
// incomplete
7+
#define rep(i, a, b) for(int i = a; i < (b); ++i)
8+
#define all(x) begin(x), end(x)
9+
#define sz(x) (int)(x).size()
10+
typedef long long ll;
11+
typedef pair<int, int> pii;
12+
typedef vector<int> vi;
13+
typedef vector<ll> vll;
14+
typedef complex<double> cd;
15+
16+
struct custom_hash {
17+
// From https://codeforces.com/blog/entry/62393
18+
const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
19+
20+
static uint64_t splitmix64(uint64_t x) {
21+
x += 0x9e3779b97f4a7c15;
22+
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
23+
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
24+
return x ^ (x >> 31);
25+
}
26+
27+
size_t operator()(uint64_t x) const {
28+
return splitmix64(x + FIXED_RANDOM);
29+
}
30+
31+
size_t operator()(pii x) const {
32+
return splitmix64( x.first ^ (x.second>>1) + FIXED_RANDOM );
33+
}
34+
};
35+
36+
struct RollbackUF {
37+
vi e; vector<pii> st;
38+
RollbackUF(int n) : e(n, -1) {}
39+
int size(int x) { return -e[find(x)]; }
40+
int find(int x) { return e[x] < 0 ? x : find(e[x]); }
41+
int time() { return sz(st); }
42+
void rollback(int t) {
43+
for (int i = time(); i --> t;)
44+
e[st[i].first] = st[i].second;
45+
st.resize(t);
46+
}
47+
bool join(int a, int b) {
48+
a = find(a), b = find(b);
49+
if (a == b) return false;
50+
if (e[a] > e[b]) swap(a, b);
51+
st.push_back({a, e[a]});
52+
st.push_back({b, e[b]});
53+
e[a] += e[b]; e[b] = a;
54+
return true;
55+
}
56+
};
57+
58+
struct Tree {
59+
vector<vector<pair<int, int>>> s;
60+
vector<vector<int>> child;
61+
int n;
62+
Tree(int n = 0) : s(2*n), n(n), child(2*n) {}
63+
void add_edge(int b, int e, pair<int, int> ab){
64+
for (b +=n, e += n; b < e; b /= 2, e /= 2) {
65+
if (b % 2) {
66+
s[b].push_back(ab);
67+
b++;
68+
}
69+
if (e % 2) {
70+
e--;
71+
s[e].push_back(ab);
72+
}
73+
}
74+
}
75+
void calc_parents(){
76+
rep(i,1,2*n){
77+
child[i/2].push_back(i);
78+
}
79+
}
80+
};
81+
82+
gp_hash_table<pair<int,int>, int, custom_hash> E;
83+
int n, m, k, dd;
84+
vector<int> ans;
85+
86+
void dfs(Tree &T, RollbackUF &UF, int cmp, int v){
87+
// cout << v << endl;
88+
int t = UF.time();
89+
for(auto& [a, b]: T.s[v]){
90+
if (UF.join(a, b)) cmp--;
91+
}
92+
if (v >= dd){
93+
ans.push_back(cmp);
94+
}
95+
for(auto &c: T.child[v]){
96+
dfs(T, UF, cmp, c);
97+
}
98+
UF.rollback(t);
99+
}
100+
101+
int main(){
102+
ios_base::sync_with_stdio(false);
103+
cin.tie(NULL);
104+
cin >> n >> m >> k;
105+
// edge (a, b) from [start to end)
106+
vector<tuple<int, int, int, int>> events;
107+
108+
// Get all events
109+
rep(i,0,m){
110+
int a, b;
111+
cin >> a >> b;
112+
if (a > b) swap(a,b);
113+
E[{a, b}] = 0;
114+
}
115+
rep(i,0,k){
116+
int t, a, b;
117+
cin >> t >> a >> b;
118+
if (a > b) swap(a, b);
119+
120+
if (t==1) {
121+
E[{a, b}] = i+1;
122+
} else {
123+
events.push_back({a, b, E[{a, b}], i+1});
124+
E[{a, b}] = -1;
125+
}
126+
}
127+
// Get the events left over
128+
for(auto [ab, t]: E){
129+
auto [a, b] = ab;
130+
if (t != -1){
131+
events.push_back({a, b, t, k+1});
132+
}
133+
}
134+
135+
dd=1;
136+
while(dd < k+1) dd <<= 1;
137+
138+
Tree T(dd);
139+
T.calc_parents();
140+
RollbackUF UF(n+1);
141+
142+
for(auto [a,b,c,d]: events){
143+
T.add_edge(c, d, {a,b});
144+
}
145+
146+
dfs(T, UF, n, 1);
147+
rep(i,0,k+1){
148+
cout << ans[i] << " ";
149+
}
150+
cout << endl;
151+
}
+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
// incomplete
4+
#define rep(i, a, b) for(int i = a; i < (b); ++i)
5+
#define all(x) begin(x), end(x)
6+
#define sz(x) (int)(x).size()
7+
typedef long long ll;
8+
typedef pair<int, int> pii;
9+
typedef vector<int> vi;
10+
typedef vector<ll> vll;
11+
typedef complex<double> cd;
12+
13+
int main() {
14+
ios_base::sync_with_stdio(false);
15+
cin.tie(NULL);
16+
int t;
17+
cin >> t;
18+
while(t--){
19+
int n;
20+
cin >> n;
21+
vi a(n);
22+
rep(i,0,n) cin >> a[i];
23+
sort(all(a));
24+
a.push_back(1e7);
25+
vi leftover;
26+
bool fail = false;
27+
ll cost = 0;
28+
int j = 0;
29+
rep(i,0,n+1){
30+
ll tmpcost = cost;
31+
bool s = false;
32+
if (a[j] == i) {
33+
j++;
34+
tmpcost++;
35+
s = true;
36+
while(a[j] == i) {
37+
tmpcost++;
38+
leftover.push_back(i);
39+
j++;
40+
}
41+
}
42+
cout << (fail ? -1 : tmpcost) << " ";
43+
44+
if (!s){
45+
if (leftover.empty()) {
46+
fail = true;
47+
} else {
48+
cost += (i - leftover.back());
49+
leftover.pop_back();
50+
}
51+
}
52+
53+
54+
55+
}
56+
cout << endl;
57+
}
58+
}

Codeforces/1619/let_play_hat.cpp

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
// incomplete
4+
#define rep(i, a, b) for(int i = a; i < (b); ++i)
5+
#define all(x) begin(x), end(x)
6+
#define sz(x) (int)(x).size()
7+
typedef long long ll;
8+
typedef pair<int, int> pii;
9+
typedef vector<int> vi;
10+
typedef vector<ll> vll;
11+
typedef complex<double> cd;
12+
13+
int main() {
14+
ios_base::sync_with_stdio(false);
15+
cin.tie(NULL);
16+
int t;
17+
cin >> t;
18+
while(t--){
19+
int n, m, k;
20+
cin >> n >> m >> k;
21+
int b = n % m;
22+
int ptr = 0;
23+
while(k--){
24+
rep(i,0,b){
25+
cout << (n/m)+1;
26+
rep(j,0,(n/m)+1){
27+
cout << " " << ptr + 1;
28+
ptr = (ptr+1)%n;
29+
}
30+
cout << endl;
31+
}
32+
int ptr2 = ptr;
33+
rep(i,b,m){
34+
cout << (n/m);
35+
rep(j,0,(n/m)){
36+
cout << " " << ptr2 + 1;
37+
ptr2 = (ptr2+1)%n;
38+
}
39+
cout << endl;
40+
}
41+
}
42+
cout << endl;
43+
}
44+
}

Codeforces/1619/new_years_problem.cpp

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
// incomplete
4+
#define rep(i, a, b) for(int i = a; i < (b); ++i)
5+
#define all(x) begin(x), end(x)
6+
#define sz(x) (int)(x).size()
7+
typedef long long ll;
8+
typedef pair<int, int> pii;
9+
typedef vector<int> vi;
10+
typedef vector<ll> vll;
11+
typedef complex<double> cd;
12+
13+
int main() {
14+
ios_base::sync_with_stdio(false);
15+
cin.tie(NULL);
16+
int t;
17+
cin >> t;
18+
while(t--){
19+
int m, n;
20+
cin >> m >> n;
21+
vector<vi> p(m, vi(n));
22+
vi max_fr(n, 0);
23+
int lo = 2e9, hi = -2e9;
24+
rep(i,0,m){
25+
rep(j,0,n){
26+
cin >> p[i][j];
27+
max_fr[j] = max(max_fr[j], p[i][j]);
28+
lo = min(lo, p[i][j]);
29+
}
30+
}
31+
int mm = max_fr[0];
32+
rep(j,0,n) mm = min(max_fr[j], mm);
33+
if (m < n) {
34+
cout << mm << endl;
35+
continue;
36+
}
37+
hi = mm+1;
38+
while(hi-lo > 1){
39+
int md = (hi+lo)/2;
40+
bool w = false;
41+
vi r_ct(m);
42+
rep(i,0,m){
43+
rep(j,0,n){
44+
if (p[i][j]>=md){
45+
r_ct[i]++;
46+
}
47+
}
48+
if (r_ct[i] > 1) w = true;
49+
}
50+
if (w) {
51+
lo = md;
52+
} else {
53+
hi = md;
54+
}
55+
}
56+
cout << lo << endl;
57+
58+
}
59+
}

Codeforces/1619/unusual_mines.cpp

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
// incomplete
4+
#define rep(i, a, b) for(int i = a; i < (b); ++i)
5+
#define all(x) begin(x), end(x)
6+
#define sz(x) (int)(x).size()
7+
typedef long long ll;
8+
typedef pair<int, int> pii;
9+
typedef vector<int> vi;
10+
typedef vector<ll> vll;
11+
typedef complex<double> cd;
12+
const int MX = 2e5+7;
13+
14+
int UF[MX];
15+
int tim[MX];
16+
int find(int x){
17+
return (UF[x] < 0 ? x : find(UF[x]));
18+
}
19+
void merge(int a, int b){
20+
a = find(a); b = find(b);
21+
if (a != b){
22+
UF[a] = b;
23+
tim[b] = min(tim[a], tim[b]);
24+
}
25+
}
26+
27+
int main() {
28+
ios_base::sync_with_stdio(false);
29+
cin.tie(NULL);
30+
int t;
31+
cin >> t;
32+
while(t--){
33+
int n, k;
34+
cin >> n >> k;
35+
vi x(n), y(n);
36+
map<int, vi> Mx, My;
37+
rep(i,0,n){
38+
cin >> x[i] >> y[i] >> tim[i];
39+
UF[i] = -1;
40+
Mx[x[i]].push_back(i);
41+
My[y[i]].push_back(i);
42+
}
43+
for(auto& [yy, vv]:My){
44+
sort(all(vv), [&x](int a, int b){return x[a] < x[b];});
45+
rep(i,0,sz(vv)-1){
46+
if (x[vv[i+1]]-x[vv[i]] <= k) merge(vv[i+1], vv[i]);
47+
}
48+
}
49+
for(auto& [xx, vv]:Mx){
50+
sort(all(vv), [&y](int a, int b){return y[a] < y[b];});
51+
rep(i,0,sz(vv)-1){
52+
if (y[vv[i+1]]-y[vv[i]] <= k) merge(vv[i+1], vv[i]);
53+
}
54+
}
55+
vi segs;
56+
rep(i,0,n){
57+
if (UF[i] == -1) segs.push_back(tim[i]);//, cout << tim[i] << endl;
58+
}
59+
sort(all(segs));
60+
int j = 0;
61+
rep(i,0,sz(segs)){
62+
while(j < sz(segs) && segs[j] <= i) j++;
63+
if (sz(segs) - j - i - 1 <= 0) {
64+
cout << i << endl;
65+
break;
66+
}
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)