hdu1541

本文解析了HDU 1541题目中星星位置问题的算法实现,通过树状数组记录星体坐标,实现按列排序后再按行排序的逻辑。文章详细解释了题目的描述及解决方案,包括代码实现和关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1541
刚开始知道了先按列排序再按行排序,一直没明白输出是怎么回事,可以联想到是左下角的所有的星的个数

注意题目上的描述: There can be only one star at one point of the plane. Stars are listed in ascending order of Y coordinate. Stars with equal Y coordinates are listed in ascending order of X coordinate.

这句话的意思就是只比较小于等于这个x的星的个数,而不用比较y,不行的话画画图理解一下

另外一个坑: 0<=X,Y<=32000 这个范围,注意树状数组不可以处理x为0 的数据 要从1开始,所有输入x+1

代码:

import java.util.Scanner;

class first{
    static int n= 16000;
    static int [] c = new int[n];//答案的数组
    static int [] a = new int[n]; //维护树状数组的数组
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N= sc.nextInt();
        for(int i  =0;i<N;i++){
            int x = sc.nextInt();
            int y = sc.nextInt();
            insert(x+1,1);
            int p = getsum(x+1)-1;
            c[p]++;
        }
        for(int i = 0;i<N;i++){
            System.out.println(c[i]);
        }
    }

    static void insert(int t,int d){
        while(t<=n){
            a[t]+= d;
            t+= lowbit(t);
        }
    }

   static int getsum(int t){
        int as = 0;
        while (t>0){
            as+= a[t];
            t-= lowbit(t);
        }
        return as;
   }


    static int lowbit(int x){
        return x&(-x);
    }
}

有点自闭,,,,wa了哎,找了好久不知道哪里错了,,,,qwq
再看看改过来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值