ZOJ 3635 树状数组+二分

来源:互联网 发布:php curl 请求头 编辑:程序博客网 时间:2024/06/07 11:37

这题那时怎么想就是想不出来……而且今晚没有多大状态,自己都晕了……一题没做出来……

baoge解释好久才懂……唉……线段树,树状数组用得还是不够熟啊……

WA了二发,才知道二分错了,二分好久不用,老是出错了现在……

#include<iostream>#include<cstring>#include<string>#include<cstdio>#define sca(a) scanf("%d",&a)#define mem(a,b) memset(a,b,sizeof(a))using namespace std;int c[50005],a[50005],b,n;void update(int x,int num){    for(int i=x; i<=n; i+=i&(-i))        c[i]+=num;}int sum(int x){    int ans=0;    for(int i=x; i>=1; i-=i&(-i))        ans+=c[i];    return ans;}int main(){    int i,j,m;    while(~sca(n))    {        mem(c,0);        for(i=1; i<=n; i++)            update(i,1);        for(i=1; i<=n; i++)        {            sca(m);            int l=1,r=n;            while(l<=r)            {                int mid=(l+r)/2,s=sum(mid);                if(s>=m) r=mid-1;                else l=mid+1;            }            a[i]=l;            update(l,-1);        }        sca(m);        for(i=0; i<m-1; i++)        {            sca(b);            printf("%d ",a[b]);        }        sca(b);        printf("%d\n",a[b]);    }    return 0;}


0 0
原创粉丝点击