今天很郁闷,关于if else的

今天很郁闷

一个代码刚还好好的,今天死活不出结果

我怀疑是sql报错

就在jsp里面加了try catch

结果什么都没有catch到

没办法,直接打印了sql

5555好郁闷啊

是因为好些个if在一起,最后又一个else

这个情况下其实应该用if else的

 

最后一个else和最后一个if配对的

我居然犯了这么低级的错误

真不应该啊

按照一下代码风格用Treap完成c++题目:模版代码:#include<bits/stdc++.h> using namespace std; const int N=1000,INF=0x3ffffff; int siz[N],son[N][2],cnt[N],val[N],dat[N]; void up(int p) { siz[p]=siz[son[p][0]]+siz[son[p][1]]+cnt[p]; } void rotate(int &p,int dir) { int q=son[p][dir]; son[p][dir]=son[q][dir^1]; son[q][dir^1]=p; p=q; up(son[p][dir^1]); up(p); } void insert(int &p,int v) { static int idx=0; if(!p) { p=++idx; val[p]=v; cnt[p]=siz[p]=1; dat[p]=rand(); return; } if(v==val[p]) { cnt[p]++; up(p); return; } if(v<val[p]) { insert(son[p][0],v); if(dat[p]<dat[son[p][0]]) rotate(p,0); } else { insert(son[p][1],v); if(dat[p]<dat[son[p][1]]) rotate(p,1); } up(p); } void remove(int &p,int v) { if(!p) return; if(v==val[p]) { if(cnt[p]>1) { cnt[p]--; up(p); return; } if(son[p][0]||son[p][1]) { if(!son[p][1]||dat[son[p][0]]>dat[son[p][1]]) { rotate(p,0); remove(son[p][1],v); } else { rotate(p,1); remove(son[p][0],v); } up(p); } else { p=0; } return; } v<val[p]?remove(son[p][0],v):remove(son[p][1],v); up(p); } int rnk(int p,int x) { if(!p) return 1; if(x==val[p]) return siz[son[p][0]]+1; if(x<val[p]) return rnk(son[p][0],x); else return rnk(son[p][1],x)+siz[son[p][0]]+cnt[p]; } int kth(int p,int k) { if(!p) return 0; if(siz[son[p][0]]>=k) return kth(son[p][0],k); else if(siz[son[p][0]]+cnt[p]>=k) return val[p]; else return kth(son[p][1],k-siz[son[p][0]]-cnt[p]); } int get_pre(int p,int x) { int pre=INF; while(p) { if(val[p]<x) { pre=val[p]; p=son[p][1]; } else { p=son[p][0]; } } return pre; } int get_nxt(int p,int x) { int nxt=INF; while(p) { if(val[p]>x) { nxt=val[p]; p=son[p][0]; } else { p=son[p][1]; } } return nxt; }题目:OIER 公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把当前在公司的所有员工的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。 工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。每位员工的工资下界都是统一规定的。每当一个人离开公司,我就要从电脑中把他的工资档案删去,同样,每当公司招聘了一位新员工,我就得为他新建一个工资档案。 老板经常到我这边来询问工资情况,他并不问具体某位员工的工资情况,而是问现在工资第 k 多的员工拿多少工资。每当这时,我就不得不对数万个员工进行一次漫长的排序,然后告诉他答案。 好了,现在你已经对我的工作了解不少了。正如你猜的那样,我想请你编一个工资统计程序。怎么样,不是很困难吧? 如果某个员工的初始工资低于最低工资标准,那么将不计入最后的答案内。 输入格式: 第一行有两个非负整数n和min,n表示下面有多少条命令,min表示工资下界。 接下来的n行,每行表示一条命令,命令可以是以下四种之一: I命令,格式为”I_k”,表示新建一个工资档案,初始工资为k。如果某员工的初始工资低于工资下界,他将立刻离开公司。 A命令,格式为”A_k”,表示把每位员工的工资加上k。 S命令,格式为”S_k”,表示把每位员工的工资扣除k。 F命令,格式为”F_k”,表示查询第k多的工资。 _(下划线)表示一个空格,I命令、A命令、S命令中的k是一个非负整数,F命令中的k是一个正整数。 在初始时,可以认为公司里一个员工也没有。 输出格式: 输出行数为F命令的条数加一。 对于每条F命令,你的程序要输出一行,仅包含一个整数,为当前工资第k多的员工所拿的工资数,如果k大于目前员工的数目,则输出-1。 输出文件的最后一行包含一个整数,为离开公司的员工的总数。 限制: I命令的条数不超过100000, A命令和S命令的总条数不超过100, F命令的条数不超过100000, 每次工资调整的调整量不超过1000, 新员工的工资不超过100000。 样例 1 : 输入: 9 10 I 60 I 70 S 50 F 2 I 30 S 15 A 5 F 1 F 2 输出: 10 20 -1 2
08-20
帮我优化这道题的FHQ Treap超时代码,题目OIER 公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把当前在公司的所有员工的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。 工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。每位员工的工资下界都是统一规定的。每当一个人离开公司,我就要从电脑中把他的工资档案删去,同样,每当公司招聘了一位新员工,我就得为他新建一个工资档案。 老板经常到我这边来询问工资情况,他并不问具体某位员工的工资情况,而是问现在工资第 k 多的员工拿多少工资。每当这时,我就不得不对数万个员工进行一次漫长的排序,然后告诉他答案。 好了,现在你已经对我的工作了解不少了。正如你猜的那样,我想请你编一个工资统计程序。怎么样,不是很困难吧? 如果某个员工的初始工资低于最低工资标准,那么将不计入最后的答案内。 输入格式 第一行有两个整数 n 和 min。n 表示下面有多少条命令,min 表示工资下界。 接下来的 n 行,每行一个字符 x 和一个整数 k,表示一条命令。命令可以是以下四种之一: I k 新建一个工资档案,初始工资为 k。如果某员工的初始工资低于工资下界,他将立刻离开公司。 A k 把每位员工的工资加上 k。 S k 把每位员工的工资扣除 k。 F k 查询第 k 多的工资。 在初始时,可以认为公司里一个员工也没有。 输出格式 对于每条 F 命令,你的程序要输出一行,仅包含一个整数,为当前工资第 k 多的员工所拿的工资数,如果 k 大于目前员工的数目,则输出 −1。 输出的最后一行包含一个整数,为离开公司的员工的总数。 请注意,初始工资低于工资下界的员工不算做离开公司的员工。 输入输出样例 输入 #1复制 9 10 I 60 I 70 S 50 F 2 I 30 S 15 A 5 F 1 F 2 输出 #1复制 10 20 -1 2 说明/提示 数据规模与约定 对于全部的测试点,保证: I 命令的条数不超过 10 5 ; A 和 S 命令的总条数不超过 100; F 命令的条数不超过 10 5 ; 每次工资调整的调整量不超过 10 3 ; 新员工的工资不超过 10 5 。 0≤n≤3×10 5 ,0≤min≤10 9 ,输入的所有数字均在 32 位带符号整形范围内。代码:#include<bits/stdc++.h> using namespace std; struct st { int v,l,r,siz,lazy,key; }fhq[300005]; int cnt,root,l,r,mid,lk,ans,n,m,k;char op; void print_tree(int now) { if(!now) return; cout<<now<<" "<<fhq[now].l<<" "<<fhq[now].r<<" "<<fhq[now].siz<<'\n'; print_tree(fhq[now].l); print_tree(fhq[now].r); } int newnode(int v) { fhq[++cnt].v=v; fhq[cnt].siz=1; fhq[cnt].key=rand(); return cnt; } void pushup(int now) { fhq[now].siz=fhq[fhq[now].l].siz+fhq[fhq[now].r].siz+1; } void pushdown(int now) { fhq[now].v+=fhq[now].lazy; if(fhq[now].l) fhq[fhq[now].l].lazy+=fhq[now].lazy; if(fhq[now].r) fhq[fhq[now].r].lazy+=fhq[now].lazy; fhq[now].lazy=0; } void fl(int now,int v,int &l,int &r) { if(!now){l=r=0;return; } else { if(fhq[now].lazy) pushdown(now); if(fhq[now].v<=v) { l=now;fl(fhq[now].r,v,fhq[now].r,r); } else { r=now;fl(fhq[now].l,v,l,fhq[now].l); } pushup(now); } } int hb(int l,int r) { if(!l||!r) return l+r; if(fhq[l].key>fhq[r].key) { fhq[l].r=hb(fhq[l].r,r); pushup(l); return l; } else { fhq[r].l=hb(l,fhq[r].l); pushup(r); return r; } } void ins(int v) { fl(root,v,l,r); root=hb(hb(l,newnode(v)),r); } void del(int v) { fl(root,v-1,l,r); lk+=fhq[l].siz; root=r; } void ask(int now,int v) { if(fhq[now].lazy) pushdown(now); if(v==0&&fhq[now].siz==1){ans=fhq[now].v;return; } if(fhq[fhq[now].l].siz>=v) ask(fhq[now].l,v); else ask(fhq[now].r,v-fhq[fhq[now].l].siz); } int main() { ios::sync_with_stdio(0); cin.tie(0); srand(time(0)); cin>>n>>m; while(n--) { cin>>op>>k; if(op=='I') { if(k>=m) ins(k); } if(op=='A') { fhq[root].lazy+=k; } if(op=='S') { fhq[root].lazy-=k;del(m); } if(op=='F') { //print_tree(root); if(k>fhq[root].siz) cout<<-1<<'\n'; else ask(root,fhq[root].siz-k),cout<<ans<<'\n'; } } cout<<lk; return 0; }
07-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值