训练日记2019.10.2
“间歇性努力,持续性焦虑”
焦虑什么呢?以前看上去天天在忙这个忙那个,把自己弄到很晚才睡觉,其实不过是在用劳累麻痹自己那颗充满焦虑的心罢了。
从高中到现在,这种焦虑所带来的阴影几乎是如影随形,从学校出来,自己开始担心自己的分班,分班考试拿到重点班的入场券,又开始为自己的排名慌里慌张,排名稳坐前三之后,开始为了高二分班而冲刺托福考试,托福成为年级第一个破百的之后,又开始提前备战sat,终于sat也考了1500,随之而来的又有申请。。。。这几乎就是我的三年了,最终,虽然我不是最聪明的那个,但是凭借好的运气和一点点踏实肯干勉强进入了一所还算不错的大学,但是到头的我却发现这只是新一个轮回的开始。为什么如此怀念高中,是因为在那里度过的每一天都如此激昂,到现在为止还依然振奋人心,但是我想我在这个过程中失去了很多,当我从前进的脚步中停下来,驻足观望的时候,原先要好的同学已经迈向了和自己不同的人生步伐,以前下课一起打闹的同学如今见面只剩下了客气,从前伊利诺伊的那片冰天雪地对于我和朋友已经有了不同的意义,三五好友现在大多也天各一方了。
这是我的高中的全部了,有人说成长注定意味着孤独,的确,在那个环境里,环境可以成为平庸的导火索,只有初心未改,才能来日方长。但是等到真的自己所一直渴望攀爬上去的顶峰之后,才发现一直以来所激励自己的山的另一边的美景,也许并不是海,可能并没有那么美好。反而是自己曾经攀登的崖壁所映照的身后,却是我一直渴求的庇护所,是我的天堂。这些曾让我相信,现在才是最美好的,享受当下,顺水推舟,才是自己最终的归宿。良久之后,重新捡起昔日的一点一滴,眼前浮现出曾经的画面,自己却不再能那么得心应手,力所能及,往日的一切都让我感到无比沉重,自己却因无法面对这种沉重而自惭,日渐一日消沉下去,此刻终于意识到,那种生活从未离自己远去,正是那种生活让自己变得饱满而富有灵魂,锐不可当,而这也正是这种焦虑的来源出处,相反,它从未走远,一直和自己如影随形,从初三到大一,这么多个年头了,始终未曾改变的是那颗坚定又年轻的心,不管别人如何指点如何说,我不打算改,今后大概也不会改,让那些日子活在我的影子中,大概才是最好的馈赠吧。
好吧,今天我没啥话讲,就是想问候一句clion的。。。。总工程师,昨天打hd多校的题自己还很高兴及时想出来了算法,说明线段树是大概差不多了,结果今天就一直报错,一天了,debug无聊得我偶然给一个变量加上了const, 直接就好了?我一个变量root = 0,完全没有访问,怎么就变成84了,这大哥不是在逗我么?害得我还找了半天错误,看来以后自己觉得算法没问题,就先提交试试,说不定就过了呢?还有国内一些博主也是醉人,好端端一个链状维护线段树非得称作为dfs,我昨天要是看了题解我可能还真就放弃了这道题,后来自己写完琢磨了下其实我写的也就是dfs,但是我的代码更好懂啊不是么?好了,放代码,回去吃饭了!
题目:HDU3974 Assign The Task(传送门)
#include <bits/stdc++.h>
using namespace std;
#define limit 1400000 + 5//防止溢出
#define INF 0x3f3f3f3f
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define ff(a) printf("%d\n",a );
typedef long long ll;
void read(int &x){
char ch = getchar();x = 0;
for (; ch < '0' || ch > '9'; ch = getchar());
for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
struct man{
int s;
man* next;//单向链表来解决,疯狂mem leak
man():s(0), next(nullptr){}
};
struct Node{
int L, R, task;
man * sub;
Node():task(-1){}
int mid(){
return L + (R - L) / 2;
}
}tree[limit];
void build(int root ,int L ,int R){
tree[root].L = L;
tree[root].R = R;
tree[root].task = -1;
tree[root].sub = nullptr;
int mid = tree[root].mid();
if(L != R){
build(root * 2 + 1, L , mid);
build(root * 2 + 2, mid + 1, R);//递归建树
}
}
void update(int root ,int pos, int val){
if(tree[root].L == pos && pos == tree[root].R ){
man*tmp = new man;
tmp->s = val;
tmp->next = tree[root].sub;
tree[root].sub = tmp;
return;
}
int mid = tree[root].mid();
if(pos <= mid){
update(root * 2 + 1, pos ,val);
}else {
update(root * 2 + 2 , pos ,val);
}
}
void assign(int root ,int pos, int task){
if(tree[root].L == pos && pos == tree[root].R ){
tree[root].task = task;
man* cur = tree[root].sub;
while(cur != nullptr){
assign(0 ,cur->s , task );//染色
cur = cur->next;
}
return;
}
int mid = tree[root].mid();
if(pos <= mid){
assign(root * 2 + 1, pos ,task);
}else{
assign(root * 2 + 2 ,pos , task);
}
}
int query(int root ,int pos){
if(tree[root].L == tree[root].R ){
return tree[root].task;
}
int mid = tree[root].mid();
if(pos <= mid){
return query(root * 2 + 1, pos);
}else{
return query(root * 2 + 2, pos);
}
}
int kase ,n,q;
int main(){
freopen("C:\\Users\\administrator01\\CLionProjects\\untitled13\\data.txt", "rt" , stdin);
int cnt = 0;
scanf("%d" , &kase);
while(kase--){
scanf("%d" , &n);
const int root = 0;
build(root , 1 , n);
for(int i = 1 ; i < n ; ++i){
int sub ,boss;
scanf("%d%d" , &sub, &boss);
update(root ,boss ,sub);
}
scanf("%d" , &q);
char cmd[0];
int a , b;
printf("Case #%d:\n",++cnt);
while(q--){
scanf("%s" , &cmd[0]);
if(cmd[0] == 'T'){
scanf("%d%d" , &a, &b);
assign(root, a, b );
}else{
scanf("%d", &a);
printf("%d\n",query(root ,a));
}
}
}
return 0;
}