$\ \ \ \ \ \ \ $HZ的机房的格局,是和别处不同的:都是当街一个曲尺形的大柜台,柜里面预备着热水和各色各样的饮料。
$\ \ \ \ \ \ \ $学OI的人,上午下午有了奥赛课,便来机房学习,有时还可以附送一部题单,一边学习一边刷题。倘肯多花一块钱,便可以买一些内部资料,如果出到十几块钱,那就能买到大佬的授课。但这些OIers,多是短衣帮,上网学的东西都是拿不上台面的,所以都是站着上网的,教练一来,也好撒腿就跑,短衣帮大抵没有这样阔绰。只有穿长衫的,才踱进店面隔壁的房子里,要题要课,慢慢地一边坐一边看。
我从十二岁起,便在HZ的机房里当伙计。一开始,教练说,样子太傻,怕侍候不了长衫主顾,就在外面做点事罢。外面的短衣主顾,虽然容易说话,但唠唠叨叨缠夹不清的也很不少。他们往往亲自带着计数器,下课的时候要看看网站有没有少算AC了的题,然后才放心:在这严重监督下,对网站计数器做手脚也很为难。所以过了几天,教练又说我干不了这事。幸亏荐头的情面大,辞退不得,仍在机房里学习罢了。
我从此便整天的站在柜台里,专管我的职务。虽然没有什么失职,但总觉得有些单调,有些无聊。教练是一副凶脸孔,主顾也没有好声气,教人活泼不得;只有 CTH 到机房,才可以笑几声,所以至今还记得。
CTH 是站着写题而穿长衫的唯一的人。他身材很高大;青白脸色,时常带些伤痕。穿的虽然是长衫,可是又脏又破,似乎十多年没有补,也没有洗。他对人说话,总是满口窝草里吗,教人半懂不懂的。因为他姓C,别人便从描红纸上的“上大人CTH”这半懂不懂的话里,替他取下一个绰号,叫作CTH。
$\ \ \ \ \ \ \ $CTH 一到店,所有喝酒的人便都看着他笑,有的叫道“ CTH ,你又没有思路了!”他不回答,只是将题解 ctrl+c 再 ctrl+v 到 subline。他们又故意的高声嚷道,“你一定又写不出代码了了!” CTH 睁大眼睛说,“你怎么这样凭空污人清白……” “什么清白?我前天亲眼见你复制了别人的整段代码,吊着打。” CTH 便涨红了脸,额上的青筋条条绽出,争辩道,“复制代码不能算复制……借鉴!……OIer的事,能算借鉴么?”接连便是难懂的话,什么“拓展思路”,什么“学习”之类,引得众人都哄笑起来:评论区内外充满了快活的空气。
听人家背地里谈论, CTH 原来也学过OI,还是Pascal和Python,但终于没有进学,又不会营生;于是愈过愈穷,弄到将要讨饭了。幸而写得一手漂亮的代码,运行起来很快很强大,便接一些私活,换一碗饭吃。可惜他又有一样坏脾气,便是摆着学过其他语言的架子愤世嫉俗。坐不到几天,便在同学的代码里面挑刺,说这段复杂度不对,那段常数太大……搞得团队很紧张,经常延误工时。如是几次,叫他做事的人也没有了。 CTH 没有法,便免不了偶然写写题解。
CTH 写过半道题,涨红的脸色渐渐复了原,旁人便又问道,“ CTH ,你当真会OI么?” CTH 看着问他的人,显出不屑置辩的神气。他们便接着说道,“你怎的连半个奖牌也捞不到呢?” CTH 立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话;这回可是全是指针堆栈之类,一些不懂了,随口便抛出一句:“你们这些人,要回家复习功课了”,在这时候,众人也都哄笑起来:评论区内外充满了快活的空气。
在这些时候,我可以附和着笑,教练是决不责备的。而且教练见了 CTH ,也每每这样问他,引人发笑。 CTH 自己知道不能和他们谈天,便只好向孩子说话。有一回对我说道,“你写过程序么?”我略略点一点头。他说,“写过,……我便考你一考。数据结构里的线段树,怎样在实现单点修改和区间求和?”我想,讨饭一样的人,也配考我么?便回过脸去,不再理会。 CTH 等了许久,很恳切的说道,“不会罢?……我教给你,记着!这些模板应该记着。将来做教练的时候,混饭要用。”我暗想我和教练的等级还很远呢,而且我们教练也从不讲线段树;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不就是线段树将每个长度不为 1 的区间划分成左右两个区间递归求解吗?” CTH 显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说,“对呀对呀!……线段树有四样写法,你知道么?你的这个办法不好,有很多冗余,万一有人写错了,也不好追查责任,我写给你看,你看我的代码,优美极了”:
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int MAX=1e5+10;
int a[MAX];
struct node{
int l,r,max,sum;
}tree[MAX<<2];
int lson(int x)
{
return x << 1;
}
int rson(int x)
{
return x<<1|1;
}
void build(int rt,int l,int r)
{
tree[rt].l=l;
tree[rt].r=r;
if(l==r)
{
tree[rt].sum=tree[rt].max=a[l];
return;
}
int mid=(l+r)>>1;
build(lson(rt),l,mid);
build(rson(rt),mid+1,r);
tree[rt].sum=tree[lson(rt)].sum+tree[rson(rt)].sum;
tree[rt].max=max(tree[lson(rt)].max,tree[rson(rt)].max);
}
void update(int rt,int pos,int v)
{
//cout<<'#';
if(tree[rt].l==tree[rt].r)
{
tree[rt].sum=tree[rt].max=v;
return ;
}
int mid=(tree[rt].l+tree[rt].r)>>1;
if(pos<=mid) update(lson(rt),pos,v);
else update(rson(rt),pos,v);
tree[rt].sum=tree[lson(rt)].sum+tree[rson(rt)].sum;
tree[rt].max=max(tree[lson(rt)].max,tree[rson(rt)].max);
}
int query(int rt,int l,int r)
{
if(l<=tree[rt].l&&tree[rt].r<=r) return tree[rt].sum;
int mid=(tree[rt].l+tree[rt].r)>>1;
if(r<=mid) return query(lson(rt),l,r);
else if(l>mid) return query(rson(rt),l,r);
else return (query(lson(rt),l,r)+query(rson(rt),l,r));
}
int main()
{
cin>>n;
if(n==0)
{
//cout<<0;
return 0;
}
for(int i=1;i<=n;i++) cin>>a[i];
build(1,1,n);
cin>>m;
string s;
for(int i=1;i<=m;i++)
{
//for(int i=1;i<=n;i++)
cin>>s;
if(s[0]=='S')
{
int x,y;
cin>>x>>y;
cout<<query(1,x,y)<<endl;
}
else
{
int x,y;
cin>>x>>y;
update(1,x,y+a[x]);
a[x]=y+a[x];
}
}
}
$\ \ \ \ \ \ \ $我愈不耐烦了,努着嘴走远。写完后,CTH 向教练讨来一副模板,还想继续说些什么,见我毫不热心,便又叹一口气,显出极惋惜的样子。
CTH 是这样的使人快活,可是没有他,别人也便这么过。
标签:,rt,int,教练,tree,CTH,rson From: https://www.cnblogs.com/Elaina-0/p/18436522/CTH