首页 > 其他分享 >十八 1265. 数星星 (树状数组)

十八 1265. 数星星 (树状数组)

时间:2024-03-26 19:14:24浏览次数:30  
标签:树状 int ++ 1265 数星星 static private new

1265. 数星星 (树状数组)
image

思路:本题要统计每个星星左下角星星的数目,由于星星按y坐标增序给出,y坐标相同的按x坐标增序给出,所以不用关注y,可以视作每个x位置有几颗星星就为几的数组,每次统计左侧前缀和,再将当前计算的星星x位置数加一,使用树状数组(推荐视频:五分钟丝滑动画讲解 | 树状数组)结构可以支持这种操作,因为树状数组从1开始,所以所有的x坐标都需要加一。同时因为本题读写次数很多,需要使用BufferedReader和BufferedWriter防止超时。

import java.util.*;
import java.io.*;

public class Main {
    private static int N = 32010, M = 15010;
    private static int[] tr = new int[N], level = new int[M];
    
    private static int lowbit(int x) {
        return x & -x;
    }
    
    private static void add(int x) {
        for (int i = x; i < N; i += lowbit(i)) {
            tr[i]++;
        }
    }
    
    private static int sum(int x) {
        int res = 0;
        for (int i = x; i > 0; i -= lowbit(i)) {
            res += tr[i];
        }
        return res;
    }
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++) {
            String[] s = br.readLine().split(" ");
            int x = Integer.parseInt(s[0]);
            x++;
            level[sum(x)]++;
            add(x);
        }
        for (int i = 0; i < n; i++) {
            bw.write(level[i] + "\n");
        }
        bw.flush();
    }
}

标签:树状,int,++,1265,数星星,static,private,new
From: https://www.cnblogs.com/he0707/p/18097353/lanqiaobei18

相关文章

  • 写模板,树状数组。
    1根据长度初始化,单点更新,区间查询。可以查询区间和(输入为位置+数值),可以查询区间内频次(输入为数值+频次1)。2根据输入数据线性初始化。3根据输入数据频次线性初始化,区间更新,单点查询。根据差分后的数组求前缀和(单点查询)。classFenwickTree{public:FenwickTree(......
  • 洛谷 P3374 【模板】树状数组 1
    classFenwickTree{public:FenwickTree(intsz):sz_(sz){ft_.resize(sz_);}FenwickTree(vector<longlong>&f){sz_=int(f.size());ft_.assign(sz_,0);for(inti=1;i<sz_;++i){ft......
  • 洛谷 P3368 【模板】树状数组 2
    classFenwickTree{public:FenwickTree(intsz):sz_(sz){ft_.resize(sz_);}FenwickTree(vector<longlong>&f){sz_=int(f.size());ft_.assign(sz_,0);for(inti=1;i<sz_;++i){ft......
  • python 递归树状结构 和 排序
    排序defrecursive_sort(self,categories):categories.sort(key=lambdax:x['sort'])forcategoryincategories:ifcategory['children']:category['children']=self.recursive_sort(ca......
  • C105 整体二分+树状数组 P2617 Dynamic Rankings
    视频链接:C105整体二分+树状数组P2617DynamicRankings_哔哩哔哩_bilibili  C96树状数组套权值线段树P2617DynamicRankings-董晓-博客园(cnblogs.com)C104【模板】整体二分+树状数组P3834可持久化线段树2-董晓-博客园(cnblogs.com)LuoguP2617Dynamic......
  • 数星星
    题目链接戳这\(Solution\)对于一个树他的子树的\(dfs\)序一定是连续的,所以可以把这个树化成链,问题就转化为了对于一段区间中星星的种类是否都不同,然后这个东西可以继续变成区间的不同种类个数是否等于区间长度,区间不同种类个数就很好求了可以看看HH的项链如果这题范围是\(1e5......
  • BUGAWAY算法小抄-树状数组(2024.03.23 更新)
    什么是树状数组?树状数组是支持单点修改和区间查询的、代码量小的数据结构。事实上,树状数组能解决的问题是线段树(一棵二叉树,每个节点表示一个区间,并存储该区间的一些相关信息。线段树可以高效地进行区间查询和区间更新操作。不是本文重点)能解决的问题的子集:树状数组能做的,线段树......
  • list转树状结构 非递归 多个顶级节点 通用工具类
    有时候,需要返给前端需要的树状结构数据。需要后端转换组装。做了个通用工具类,非递归方式,简单易用。上代码:树结构类:packagecom.ruoyi.shop;importlombok.Data;importjava.util.List;/***返回前端树结构*@Authorwql*@Date2024/3/219:36*/@Datapubl......
  • 最基础树状数组
    1.单点加2.前缀和查询intn,m;inta[N];inttr[N];intlowbit(intx){ returnx&(-x);}voidadd(intpos,intk){ for(inti=pos;i<=n;i+=lowbit(i))tr[i]+=k;}intquery(intx){ intres=0; for(inti=x;i;i-=lowbit(i))res+=tr[i]; returnres;}voidsolve(......
  • 大都市meg(线段树/树状数组+LCA)
    题目描述在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员BlueMary也开始骑着摩托车传递邮件了。不过,她经常回忆起以前在乡间漫步的情景。昔日,乡下有依次编号为1..n的n个小村庄,某些村庄之间有一些双向的土路。从每个村庄都恰好有一条路径到达村庄1(即比特堡)。并且......