-
Bio
真正的男人在一切结束了才会流泪
我从长眠中醒来以后,从那一天开始.......也许我一直在等待着这个时刻的到来....
AFO
你想要的梗,我这有
(其实听不到)
就算出走半生,归来仍要是少年
哼!你忘记了吗? ...在我的世里,“红色“是不存在的
所以,这一定.....是我的 “眼泪”
我从长眠中醒来以后,从那一天开始.......也许我一直在等待着这个时刻的到来....请记住我的话,小姐
真正的男人在一切都结束的时候,才会流泪.....
以前,不知曾把多少杯黑暗一饮而尽....... 今天的这一杯..比已往的任何一杯都美妙
...你觉得呢?
感谢陈某的快读模板
#include<bits/stdc++.h> #define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) char buf<:1<<21:>,*p1=buf,*p2=buf; template <typename L> inline void Read(L &X){ char c=getchar();L zhi=0,fu=1; while(not isdigit(c)){if(c=='-')fu=-1;c=getchar();} while(isdigit(c)){zhi=(zhi<<1)+(zhi<<3)+c-'0';c=getchar();} X=fu*zhi; } template <typename L> inline void Write(L X){ if(X<0) putchar('-'),X=-X; if(X>9) Write(X/10); putchar(X%10^48); } int main(){ exit(0); }
感谢黄yy dalao的fhqTreap模板
绝对不是我懒得背#include <bits/stdc++.h> #define maxn 1000005 using namespace std; struct node { int pri; int key; int siz; int lc, rc; }; int rt; int tot; node t[maxn]; void pushup(int u) { t[u].siz = t[t[u].lc].siz + t[t[u].rc].siz + 1; } int newnode(int k) { t[++tot] = {rand(), k, 1, 0, 0}; return tot; } pair<int, int> splitByValue(int u, int k) { if (!u) return {0, 0}; if (t[u].key <= k) { auto p = splitByValue(t[u].rc, k); t[u].rc = p.first; pushup(u); return make_pair(u, p.second); } else { auto p = splitByValue(t[u].lc, k); t[u].lc = p.second; pushup(u); return make_pair(p.first, u); } } pair<int, int> splitBySize(int u, int k) { if (!u) return {0, 0}; if (t[t[u].lc].siz + 1 <= k) { auto p = splitBySize(t[u].rc, k - t[t[u].lc].siz - 1); t[u].rc = p.first; pushup(u); return make_pair(u, p.second); } else { auto p = splitBySize(t[u].lc, k); t[u].lc = p.second; pushup(u); return make_pair(p.first, u); } } int merge(int u, int v) { if (!u || !v) return u | v; if (t[u].pri > t[v].pri) { int p = merge(t[u].rc, v); t[u].rc = p; pushup(u); return u; } else { int p = merge(u, t[v].lc); t[v].lc = p; pushup(v); return v; } } void deb(int u) { if (!u) return; deb(t[u].lc); printf("~~~~~~~%d %d %d\n", u, t[u].key, t[u].siz); deb(t[u].rc); } void ins(int k) { auto p = splitByValue(rt, k); rt = merge(merge(p.first, newnode(k)), p.second); } void del(int k) { auto p = splitByValue(rt, k); auto q = splitBySize(p.first, t[p.first].siz - 1); rt = merge(q.first, p.second); } int kth(int k) { auto p = splitBySize(rt, k); auto q = splitBySize(p.first, t[p.first].siz - 1); int ans = t[q.second].key; rt = merge(merge(q.first, q.second), p.second); return ans; } int rk(int k) { auto p = splitByValue(rt, k - 1); int ans = t[p.first].siz + 1; rt = merge(p.first, p.second); return ans; } int pre(int k) { // return kth(rk(k - 1)); return kth(rk(k) - 1); } int suf(int k) { return kth(rk(k + 1)); } int main() { int n; srand(time(0)); scanf("%d", &n); while (n--) { int op, k; scanf("%d%d", &op, &k); if (op == 1) ins(k); else if (op == 2) del(k); else if (op == 3) printf("%d\n", rk(k)); else if (op == 4) printf("%d\n", kth(k)); else if (op == 5) printf("%d\n", pre(k)); else if (op == 6) printf("%d\n", suf(k)); // deb(rt); } return 0; }
番外
2021-2022
看到确定的未来,
有能力的,马上做;
没能力的,现在学。
用明天一定会发生的事,倒推今天要做的事。
如果未来一定会发生,那就先进入那个未来
目标清晰了,清单就变短了;
从确定性里找实际思维点,事情就会变得简单
做完=做了+检查
世间多少好答案,在等一个好问题
流水可能会绕路,但绝不会回头
-
Accepted Problems
-
Recent Activities
- 11-16-NOIP测试5 IOI
- 11-15-NOIP测试4 IOI
- 11-14-NOIP测试3 IOI
- 11-13-NOIP测试2 IOI
- 11-12-NOIP测试1 IOI
- CSP2023 S组改题 IOI
- CSP2023 J组改题 IOI
- 高2022级10月17日NOIP模拟赛7 IOI
- 高2022级10月15日NOIP模拟赛5 IOI
- 高2022级10月6日NOIP模拟赛4 IOI
- 高2022级10月5日NOIP模拟赛3 IOI
- 高2022级10月3日NOIP模拟赛2 IOI
- 高2022级9月23日NOIP模拟赛1 IOI
- 提高组测试4 IOI
- 提高组测试3 IOI
- 提高组测试改题 IOI
- 【高2022级】2023-4-9数据结构测试改题 Assignment
-
Recent Solutions
This person is lazy and didn't wrote any solution
Problem Tags
- 动态规划
- 6
- NOIP 提高组
- 4
- CDQ分治
- 3
- 背包
- 3
- 树形DP
- 3
- 2019
- 2
- 整体二分
- 2
- 点分治
- 2
- CSP-S
- 2
- 2014
- 1
- 2015
- 1
- 2016
- 1
- 2017
- 1
- 可持久化Trie树
- 1
- 状压DP
- 1