ZOJ 3279 Ants 二分树状数组
2014-01-12 20:38
375 查看
----------
----------
const int maxn=110000; const int maxm=10000; int n,m; struct BIT{ int n; int tree[maxn]; void init(int n){ this->n=n; memset(tree,0,sizeof(tree)); } int lowbit(int x){ return x&(-x); } void add(int x,int val){ for (int i=x;i<=n;i+=lowbit(i)) tree[i]+=val; } int query(int x){ int ret=0; for (int i=x;i>0;i-=lowbit(i)) ret+=tree[i]; return ret; } //离散 p=lower_bound(b+1,b+n+1,a[i])-b; //逆序数 x=(i-1)-query(p);add(p,1); }bt; int a[maxn]; int main(){ while (~scanf("%d",&n)){ bt.init(n); for (int i=1;i<=n;i++) { scanf("%d",&a[i]); bt.add(i,a[i]); } scanf("%d",&m); char s[2]; while (m--){ scanf("%s",s); if (s[0]=='p'){ int x,y; scanf("%d%d",&x,&y); bt.add(x,-a[x]); bt.add(x,y); a[x]=y; } else if (s[0]=='q'){ int x,l=1,r=n,ans=0; scanf("%d",&x); while (l<=r){ int mid=(l+r)/2; if (bt.query(mid)<x){ ans=mid; l=mid+1; } else r=mid-1; } printf("%d\n",ans+1); } } } return 0; }
----------
相关文章推荐
- uva 11269 - Setting Problems(相邻交换法)
- 文本分类的两种方法
- C#打开一个文本文件并读写
- 27-反弹的球
- 编译busybox的时候出现error: field 'in' has incomplete type
- vim之<F12> 一键生成tags的一些小优化
- 父类--子类
- MTK Android 菜鸟上手之旅
- Leetcode: Longest Common Prefix
- Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.t
- ios define NSLog debug 应用发布nslog注释
- 自然语言处理中文 工具包
- 【磁盘处理相关方法】3,得到最空闲的磁盘
- C#读写文本文件
- 在何时该用什么方式编译WinCE
- 旧书重温:0day2【9】第六章 攻击c++的虚函数
- perl cgi编程简介
- 图像增强
- 字面量理解
- work recorder for math