zoukankan      html  css  js  c++  java
  • HDU 1556 Color the ball

    转载请注明出处:http://blog.csdn.net/a1dark

    分析:学树状数组的时候遇到了这题、仔细一看发现可以用前缀数组轻松AC、于是便用前缀数组AC之、代码如下:

    #include<stdio.h>
    #include<string.h>
    int a[100005];
    int main(){
        int n,x,y,i;
        while(scanf("%d",&n)!=EOF){
        memset(a,0,sizeof(a));
        if(n==0)break;
        for(i=1;i<=n;i++){
            scanf("%d%d",&x,&y);
            a[x]++;a[y+1]--;
        }
        for(i=2;i<=n;i++)
            a[i]+=a[i-1];
        for(i=1;i<=n;i++){
            if(i==1)
                printf("%d",a[i]);
            else
            printf(" %d",a[i]);
        }
        printf("
    ");
        }
        return 0;
    }
    


    但是毕竟是在学树状数组、所以还是用树状数组再次AC之、

    #include<stdio.h>
    #include<string.h>
    int sum[100005];
    int n;
    int lowbit(int x){
        return x&(-x);
    }
    int getsum(int x){
        int s=0;
        while(x>0){
            s+=sum[x];
            x-=lowbit(x);
        }
        return s;
    }
    void update(int x,int num){
        while(x<=n){
            sum[x]+=num;
            x+=lowbit(x);
        }
    }
    int main(){
        int i,x,y;
        while(scanf("%d",&n)!=EOF){
            if(n==0)break;
            memset(sum,0,sizeof(sum));
            for(i=1;i<=n;i++){
                scanf("%d%d",&x,&y);
                update(x,1);
                update(y+1,-1);
            }
            for(i=1;i<=n;i++){
                printf("%d",getsum(i));
                if(i<n)printf(" ");
            }
            printf("
    ");
        }
        return 0;
    }
    

    至于 线段树的方法就不写了、毕竟是道模板题、

  • 相关阅读:
    java。多态
    java。构造方法
    java.final修饰符l
    java。this的用法
    数据库:内连接与外连接区别
    Java工具类-设置字符编码
    Java工具类-验证码工具
    Java工具类-加密算法
    java中的object... args参数
    针对MySql封装的JDBC通用框架类(包含增删改查、JavaBean反射原理)
  • 原文地址:https://www.cnblogs.com/james1207/p/3285596.html
Copyright © 2011-2022 走看看