1057. Stack
来源:互联网 发布:javascript 闭包 编辑:程序博客网 时间:2024/06/06 13:13
这个题网上都是用树形数组做的。要正确写出树形数组和lower_bound的代码。用树形数组关键是0这个下标是不能用的,因为lowerbit(0)为0会死循环,因此用lower_bound(l,r,x)查找时l不能从0而应从1开始。
#include<stack>#include<iostream>using namespace std;const int N=100003;stack<int>st;int sm[N];int lowbit(int x){ return (-x)&x;}void chg(int i,int x){ while(i<N) sm[i]+=x,val[i]=sm[i],i+=lowbit(i);}int sum(int i){ int ret=0; while(i>=1) ret+=sm[i],i-=lowbit(i); return ret;}int lowerbd(int l,int r,int x){ while(l<=r){ int m=(l+r)>>1; sum(m)>=x?r=m-1:l=m+1;} return l;}int main(){ int cnt;scanf("%d",&cnt); while(cnt--){ char s[40];scanf("%s",s); switch(s[1]){ case 'o': if(st.empty())printf("Invalid\n"); else {printf("%d\n",st.top());chg(st.top(),-1);st.pop();} break; case 'u': int val; scanf("%d",&val); chg(val,1); st.push(val); break; case 'e': if(st.empty())printf("Invalid\n"); elseprintf("%d\n",lowerbd(1,N-1,(st.size()+1)>>1)); }//switch }//while }
0 0
- 1057. Stack
- 1057. Stack
- 1057. Stack
- 1057. Stack
- 1057.Stack
- 1057. Stack
- 1057. Stack
- 1057. Stack (30)-PAT
- 1057. Stack (30)
- 1057. Stack (30)
- PAT 1057. Stack
- PAT 1057. Stack
- 1057. Stack (30)
- 1057. Stack (30)
- pat 1057. Stack (30)
- 1057. Stack (30)--看
- 1057. Stack (30)
- PAT 1057. Stack (30)
- table/div高度100%无效果问题
- poj 1195 mobile phones 二维树状数组
- bzoj1091: [SCOI2003]切割多边形
- 16 PHP 数组排序函数
- 一些定义
- 1057. Stack
- JavaScript经典代码【二】【FLASH中调用JS方法】
- android 常用adb命令
- poj3664Election Time
- 【HihoCoder】最长回文子串
- Struts2返回JSON数据的具体应用范例
- android账号与同步之同步实现
- 学习笔记
- 番茄插件常用快捷键