zoj 3635 Cinema in Akiba(树状数组+二分)
来源:互联网 发布:拉萨有4g网络吗 编辑:程序博客网 时间:2024/06/05 20:43
用树状数组维护第i个位置前面有多少空位,然后二分查询。
代码:
#include <iostream>#include <cstdio>#include <cstring>#define maxn 50010using namespace std;int a[maxn];int c[maxn];int N;int res[maxn];int lowbit(int n){return n&(-n);}void add(int p,int n){while(p<=N){c[p]+=n;p+=lowbit(p);}}int sum(int p){ int res=0; while(p>0){res+=c[p];p-=lowbit(p); } return res;}int solve(int k){ int l=0,r=N+1; int m;while(l<r-1){m=(l+r)>>1;if(sum(m)>=k) r=m;else l=m;}return r;}int main(){ while(~scanf("%d",&N)){memset(a,0,sizeof(a));memset(c,0,sizeof(c));for(int i=1;i<=N;i++){scanf("%d",&a[i]);add(i,1);}for(int i=1;i<=N;i++){res[i]=solve(a[i]);add(res[i],-1);}int m;scanf("%d",&m);for(int i=1;i<=m;i++){int t;scanf("%d",&t);printf("%d",res[t]);if(i<m){printf(" ");}else printf("\n");} } return 0;}
0 0
- ZOJ 3635 Cinema in Akiba(树状数组 + 二分)
- zoj 3635 Cinema in Akiba(树状数组+二分)
- ZOJ 3635 Cinema in Akiba(二分+树状数组)
- ZOJ 3635 Cinema in Akiba (树状数组+二分)
- zoj 3635 Cinema in Akiba 二分+树状数组
- ZOJ 3635——Cinema in Akiba(树状数组+二分)
- zoj3635-Cinema in Akiba 树状数组+二分
- ZOJ3635——Cinema in Akiba(树状数组+二分)
- ZOJ 3635 Cinema in Akiba[ 块状数组 ]
- ZOJ Monthly, August 2012 - C Cinema in Akiba 树状数组+二分
- ZOJ-3635-Cinema in Akiba
- ZOJ 3635 Cinema in Akiba
- zoj 3635 Cinema in Akiba
- zoj 3635 Cinema in Akiba 树状数组求第K大
- ZOJ 3635 Cinema in Akiba(线段树)
- ZOJ 题目3635 Cinema in Akiba(线段树插空)
- ZOJ 3635 Cinema in Akiba【线段树】
- Poj 2828 Buy Tickets \ Zoj 3635 Cinema in Akiba
- Large-scale Video Classification with Convolutional Neural Networks(泛读)
- 黑马程序员------foundation常用结构体
- 【HDU】3947 River Problem 最小费用最大流
- 在debian上运行boa
- hibernate中lazy的使用
- zoj 3635 Cinema in Akiba(树状数组+二分)
- 微分方程的Matlab解法
- Java多线程之~~~Fork/Join框架的同步和异步
- PLSQL基础知识
- 传统的table布局和css布局的比较
- junit in action读书笔记
- linux守护进程
- 【uva】10494 If We Were a Child Again
- 第八届湖南省赛I题 Collecting Coins(BFS)