intmain(){ int T; cin >> T; while (T--) { ll a, b; cin >> a >> b; if (a == b) { puts("0"); continue; } int d = abs(a - b), tot = 1, sum = 0; while (true) { sum += tot; if (sum >= d && (sum - d) % 2 == 0) { break; } tot++; } printf("%d\n", tot); } return0; }
intmain(){ int T; scanf("%d", &T); while (T--) { scanf("%d", &n); int s1 = 0, s2 = 0; for (int i = 1; i <= n + n; i++) { scanf("%d", a + i); pre[i] = 0; if (a[i] == 1) s1++; elseif (a[i] == 2) s2++; } map<int,int> mp; mp[0] = 0; for (int i = n; i >= 1; i--) { if (i < n) pre[i] = pre[i + 1]; if (a[i] == 1) pre[i]++; else pre[i]--; if (!mp.count(-pre[i])) mp[-pre[i]] = n - i + 1; } int ans = 2 * n, last = 0; if (mp.count(s2 - s1)) ans = mp[s2 - s1]; for (int i = n + 1; i <= n + n; i++) { if (a[i] == 1) last++; else last--; // dbg(i, last, last + s2 - s1); if (mp.count(last + s2 - s1)) { // dbg(i, mp[last + s2 - s1]); ans = min(ans, mp[last + s2 - s1] + i - n); } } printf("%d\n", ans); } return0; }
int n, le[maxn], ri[maxn], pre[maxn], id[maxn]; PII a[maxn];
structBIT { int b[maxn]; voidupdate(int i, int x){ for (; i < maxn; i += i & -i) b[i] += x; } intquery(int i){ int r = 0; for (; i; i -= i & -i) r += b[i]; return r; } } f, g;
intfind(int x){ return x == pre[x] ? x : pre[x] = find(pre[x]); } intjoin(int x, int y){ x = find(x); y = find(y); if (x == y) return0; pre[x] = y; return1; }
intmain(){ scanf("%d", &n); for (int i = 1; i <= n + n; i++) pre[i] = i; vector<PII> evs; for (int i = 1; i <= n; i++) { scanf("%d%d", &a[i].first, &a[i].second); evs.push_back({a[i].first, 1}); evs.push_back({a[i].second, -1}); le[a[i].second] = a[i].first; ri[a[i].first] = a[i].second; id[a[i].first] = i; id[a[i].second] = i; } sort(begin(evs), end(evs)); ll tot = 0; int flag = 1; set<int> sl, sr; for (auto& e: evs) { if (e.second == 1) { sl.insert(e.first); sr.insert(ri[e.first]); } elseif (e.second == -1) { auto it = sl.rbegin(); vector<int> del; while (flag && it != sl.rend()) { if (*it <= le[e.first]) break; flag &= join(id[e.first], id[*it]); del.push_back(*it); it++; } sl.erase(le[e.first]); // for (auto& x: del) sl.erase(x); } if (!flag) break; } int c = 0; for (int i = 1; i <= n; i++) if (find(i) == i) c++; if (c > 1) flag = 0; if (flag) puts("YES"); elseputs("NO"); return0; }
int n, le[maxn], ri[maxn]; vector<int> edge[maxn];
int tot, siz[maxn]; voidgetsz(int u, int f){ siz[u] = 1; for (int v: edge[u]) { if (v == f) continue; getsz(v, u); siz[u] += siz[v]; } }
voiddfs(int u, int f, int beg, int sr){ int sz = (int)edge[u].size() - (u != 1); le[u] = beg; ri[u] = sr + sz + 1; int tot = ri[u] - 1, sum = 0; for (int v: edge[u]) { if (v == f) continue; dfs(v, u, tot, ri[u] + sum); tot--; sum += 2 * siz[v] - 1; } }
intmain(){ scanf("%d", &n); for (int i = 2; i <= n; i++) { int u, v; scanf("%d%d", &u, &v); edge[u].push_back(v); edge[v].push_back(u); } getsz(1, 0); dfs(1, 0, 1, 1); for (int i = 1; i <= n; i++) printf("%d %d\n", le[i], ri[i]); return0; }
inlineintadd(int x, int y){ x += y; return x >= mod ? x -= mod : x; } inlineintsub(int x, int y){ x -= y; return x < 0 ? x += mod : x; } inlineintmul(int x, int y){ return1ll * x * y % mod; } inlineintqpow(int x, ll n){ int r = 1; while (n > 0) { if (n & 1) r = 1ll * r * x % mod; n >>= 1; x = 1ll * x * x % mod; } return r; } inlineintinv(int x){ return qpow(x, mod - 2); }
int n, m, k, S[maxn][maxn];
intmain(){ cin >> n >> m >> k; S[0][0] = 1; for (int i = 1; i <= k; i++) { for (int j = 1; j <= k; j++) { S[i][j] = add(S[i - 1][j - 1], mul(S[i - 1][j], j)); } } int ans = 0, f = 1, invm = inv(m); for (int i = 1; i <= k && i <= n; i++) { int tmp = mul(S[k][i], qpow(invm, i)); f = mul(f, n + 1 - i); tmp = mul(tmp, f); ans = add(ans, tmp); } cout << ans; return0; }