zoukankan      html  css  js  c++  java
  • hdu 3450 Counting Sequences

    /*
    n*n暴力 这个很好想 
    */
    #include<cstdio>
    #define maxn 100010
    #define mod 9901
    using namespace std;
    int n,k,a[maxn],f[maxn],ans;
    int Abs(int a){
        return a<0?-a:a;
    }
    int max(int a,int b){
        return a<b?b:a;
    }
    int main()
    {
        freopen("cin.txt","r",stdin);
        freopen("right.out","w",stdout);
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;i++){
            for(int j=1;j<i;j++){
                if(Abs(a[i]-a[j])>k)continue;
                f[i]=(f[i]+f[j]+1)%mod;
            }
            ans=(ans+f[i])%mod;
        }    
        printf("%d
    ",ans);
        return 0;
    }
    /*
    搞个数据结构来优化
    开始想错了题意 就写了线段树+离散化 
    后来反应过来了..树状数组就行QAQ
    开始写wa了 改着改着就搞出了两个线段树
    这就跑的有点慢了 但A点没问题 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 100010
    #define mod 9901
    #define lc k*2
    #define rc k*2+1
    #define mid (l+r)/2
    using namespace std;
    int n,m,d,a[maxn],c[maxn];
    int sum[maxn*4],tot[maxn*4];
    int init(){
        int x=0,f=1;char s=getchar();
        while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
        while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
        return x*f;
    }
    void Change(int k,int l,int r,int x,int y){
        if(l==x&&r==x){
            sum[k]=(sum[k]+y)%mod;return;
        }
        if(x<=mid)Change(lc,l,mid,x,y);
        else Change(rc,mid+1,r,x,y);
        sum[k]=(sum[lc]+sum[rc])%mod;
    }
    int Query(int k,int l,int r,int x,int y){
        if(x<=l&&y>=r){
            return sum[k];
        }
        int ret=0;
        if(x<=mid)ret=(ret+Query(lc,l,mid,x,y))%mod;
        if(y>mid)ret=(ret+Query(rc,mid+1,r,x,y))%mod;
        return ret;
    }void change(int k,int l,int r,int x,int y){
        if(l==x&&r==x){
            tot[k]=(tot[k]+y)%mod;return;
        }
        if(x<=mid)change(lc,l,mid,x,y);
        else change(rc,mid+1,r,x,y);
        tot[k]=(tot[lc]+tot[rc])%mod;
    }
    int query(int k,int l,int r,int x,int y){
        if(x<=l&&y>=r){
            return tot[k];
        }
        int ret=0;
        if(x<=mid)ret=(ret+query(lc,l,mid,x,y))%mod;
        if(y>mid)ret=(ret+query(rc,mid+1,r,x,y))%mod;
        return ret;
    }
    int main()
    {    
        while(~scanf("%d%d",&n,&d)){
            memset(tot,0,sizeof(tot));
            memset(sum,0,sizeof(sum));
            m=0;
            for(int i=1;i<=n;i++){
                a[i]=init();c[i]=a[i];
            }
            sort(c+1,c+1+n);
            m=unique(c+1,c+1+n)-c-1;
            int L,R,M,S,s;
            for(int i=1;i<=n;i++){
                L=lower_bound(c+1,c+1+m,a[i]-d)-c;
                R=upper_bound(c+1,c+1+m,a[i]+d)-c-1;
                M=lower_bound(c+1,c+1+m,a[i])-c;
                S=Query(1,1,m,L,R);
                s=query(1,1,m,L,R);
                Change(1,1,m,M,S+s);
                change(1,1,m,M,1);
            }
            printf("%d
    ",sum[1]);
        }
        return 0;
    }
  • 相关阅读:
    durex-word
    闲聊可穿戴设备
    闲聊质数
    一步一步学swift之:自己写Api接口-PHP
    Swift实战-小QQ(第2章):QQ侧滑菜单
    Swift实战-小QQ(第1章):QQ登录界面
    一步一步学习Swift之(一):关于swift与开发环境配置
    objective-c底层: runtime机制
    手把手教你视频直播开发
    多语言本地化开发Localized
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5887469.html
Copyright © 2011-2022 走看看