zoukankan      html  css  js  c++  java
  • 数星星 Stars 题解

    题目链接

    分析

    一道树状数组,但坑点比较多。。。
    首先在草稿纸上画图可以得知:星星的等级与(x)无关,至于(y)的大小有关,于是我们可以根据输入顺序一一将其插入树状数组进行维护,此星星的等级其实就是在插入前以(1)~星星的(y)的星星数量和。

    注意

    星星的坐标是从((0, 0))开始存,但树状数组不能够维护,所以要提前将所有星星的(x)加上一。(如果在求和函数中把限度跳到0就会卡死循环我就错了)

    代码

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int MAXN = 3e5 + 5;
    
    int x[MAXN], n, m, star[MAXN], t[MAXN];
    int bit[MAXN];
    
    int lowbit(int x) {
    	return x & (-x);
    }
    
    void update(int k, int x) {
    	for (int i = k; i <= MAXN; i += lowbit(i)) {
    		bit[i] += x;
    	}
    }
    
    int Sum(int k) {
    	int ans = 0;
    	for (int i = k; i; i -= lowbit(i)) {
    		ans += bit[i];
    	} 
    	return ans;
    } 
    
    int main() {
    //	freopen("star.in", "r", stdin);
    //	freopen("star.out", "w", stdout);
    	scanf ("%d", &n);
    	for (int i = 1, y; i <= n; i++) {
    		scanf ("%d %d", &x[i], &y);
    		++x[i];
    		m = max(m, x[i]);
    	}
    	for (int i = 1; i <= n; i++) {
    		star[Sum(x[i])] ++;
    		update(x[i], 1);
    	}
    	for (int i = 0; i < n; i++) {
    		printf ("%d
    ", star[i]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Android开发切换host应用
    HTTP缓存相关头
    我理解的Android加载器
    Mysql的NULL的一个注意点
    Android的Activity生命周期
    说说jsonp
    PHP的pcntl多进程
    谈谈不换行空格
    关于Java代码优化的44条建议!
    java8 遍历数组的几种方式
  • 原文地址:https://www.cnblogs.com/cqbz-ChenJiage/p/13519496.html
Copyright © 2011-2022 走看看