Skip to content

Instantly share code, notes, and snippets.

//Bitset
#include <iostream>
using namespace std;
struct Bitset{
long long m;
Bitset(int x = 0){m = x;}
const static long long empty_set = 0;
bool Find(int in){return m&(1LL<<in);}
void Erase(int in){ m &= ~in;}
///Soluciones
1. hacer una función que bote -1 en caso que un entero sea negativo y 0 en otro caso.
rpta:
int neg(int x){return -(x < 0);}
2. intercambie dos enteros x e y, se entiende que ahora x sera y e y tendra el valor inicial de x.
rpta:
//fenwick_tree.cpp
//complexity:
// update - O(log n)
// query - O(log n)
// sum_range - O(log n)
// binary_fenwick - O(log n)
const int maxN = 100002;
int ft[maxN];
//sparse_table
//complexity:
// min_range - O(1)
// build - O(n * log n)
const int N = 100002;
const int LogN = 18;
int st[N][LogN];
int n;
//segment tree
//complexity:
// merge - O(1)
// shift - O(1)
// upd - O(1)
// build - O(n)
// update - O(log n)
// query - O(log n)
const int maxN = 100002;
//sqrt descomposition
//complexity:
// build - O(n)
// query - O(sqrt n)
// update - O(1)
const int N = 100005;
int block[350], a[N];
int n, nb;
const int N = 50002;
int len, n, q;
int vis[N], ans[N];
int a[N], ans_mo;
struct Query{int l, r, in;} Q[N];
bool cmp(const Query& p, const Query& q){
return p.r/len < q.r/len or p.r/len == q.r/len and p.l > q.l;
}
int times = 0;
int L[N], R[N], sz[N];
bool S1[N], S2[N];
int ans[N], p[N];
void dfs(int x, int p){
L[x] = times++;
for(int v : adj[x])
if(v != p) dfs(v, x);
R[x] = times++;