Skip to content

Instantly share code, notes, and snippets.

@jacky860226
jacky860226 / concurrent_vector.hpp
Created January 2, 2026 16:48
Concurrent Vector
#include <atomic>
#include <cassert>
#include <new>
#include <thread>
#include <utility>
#if __cplusplus >= 202002L
#include <bit>
#elif defined(_MSC_VER)
#include <intrin.h>
@jacky860226
jacky860226 / thread_local_storage.hpp
Created November 8, 2025 02:37
Thread Local Storage
#pragma once
#include <atomic>
#include <cstdint>
#include <cstring>
#include <deque>
#include <functional>
#include <memory>
#include <thread>
namespace TLS::detail {
@jacky860226
jacky860226 / skip_list.h
Created November 8, 2025 02:33
Skip List
#pragma once
#include <algorithm>
#include <array>
#include <cstring>
#include <random>
template <typename T, size_t max_level = 32, typename Compare = std::less<T>>
class SkipList {
struct Node {
union {
@jacky860226
jacky860226 / concurrent_queue.hpp
Created October 7, 2025 16:52
Concurrent Queue
#pragma once
#include <algorithm>
#include <atomic>
#include <cassert>
#include <cstddef>
#include <iterator>
#include <memory>
#include <thread>
using Point = pair<int,int>;
ll cross(const Point& a, const Point& b) {
return 1ll * a.first * b.second - 1ll * a.second * b.first;
}
// 逆时针
// 参考 mnbvmar 的写法:https://codeforces.com/contest/1284/submission/68178688
bool cmp_polar(const Point& a, const Point& b) {
bool aorig = a.second > 0;
bool borig = b.second > 0;
if (aorig != borig) {
@jacky860226
jacky860226 / garner.hpp
Created January 25, 2025 07:42
Garner's Algorithm
using LL = long long;
auto garner(const std::vector<LL> &A, const std::vector<LL> &M, LL mod) {
assert(A.size() == M.size());
auto X = A;
for (size_t i = 0; i < A.size(); ++i) {
for (size_t j = 0; j < i; ++j) {
X[i] = mod_inv(M[j], M[i]) * (X[i] - X[j]) % M[i];
if (X[i] < 0) X[i] += M[i];
}
}
@jacky860226
jacky860226 / CooleyTukeyAlgorithm.cpp
Last active January 25, 2025 09:56
Cooley-Tukey Algorithm
#include <algorithm>
#include <cassert>
#include <cstddef>
template <typename T, typename Policy>
class CooleyTukeyAlgorithm {
size_t reverse_bits_len(size_t N, size_t len) {
return ::reverse_bits(N) >> (sizeof(N) * 8 - len);
}
public:
@jacky860226
jacky860226 / SparseSegmentTree.hpp
Last active February 12, 2023 04:06
Sparse Segment Tree (for IOI 2013 Game)
template <class ValueTy> struct Tree {
int L, R;
Tree *lc, *rc;
ValueTy Val;
Tree() = default;
Tree(int L, int R) : L(L), R(R), lc(nullptr), rc(nullptr), Val() {}
void pull() {
Val = 0;
if (lc)
Val += lc->Val;
@jacky860226
jacky860226 / system_test.hpp
Last active October 3, 2022 01:34
ICPC Judge Test
#include <bits/stdc++.h>
using namespace std;
namespace system_test {
const size_t KB = 1024;
const size_t MB = KB * 1024;
const size_t GB = MB * 1024;
size_t block_size, bound;
@jacky860226
jacky860226 / Discretizer.h
Last active December 13, 2024 05:14
Relable
#include <algorithm>
#include <stdexcept>
#include <vector>
template <typename T, typename Alloc = std::allocator<T>>
class Discretizer : private std::vector<T, Alloc> {
void build() {
std::sort(std::vector<T, Alloc>::begin(), std::vector<T, Alloc>::end());
std::vector<T, Alloc>::erase(std::unique(std::vector<T, Alloc>::begin(),
std::vector<T, Alloc>::end()),
std::vector<T, Alloc>::end());