赞
踩
- /* 题目中的y是递增,不影响 */
- /* 直接看作一维数组的更新维护 */
- /* 将数据二进制化,拿最低位的1 */
- /* 转化为线段树的解法才是核心 */
- /* 思想是前缀和 */
- #include <bits/stdc++.h>
-
- using namespace std;
-
- const int N = 15010 , M = 32010;
-
- int level[M];
- int tr[M];
- int n;
- /* 求最低位的1 */
- int lowbit(int x)
- {
- return x&-x;
- }
- /* 树状数组 */
- int add(int x, int v)
- {
- for(int i = x;i <= M;i += lowbit(i)) tr[i] += v;
- }
- /* 查询 */
- int qy(int x)
- {
- int ans = 0;
- for(int i = x; i ;i -= lowbit(i))
- {
- ans += tr[i];
- }
- return ans;
- }
-
- int main()
- {
- /* 读入 */
- cin >> n;
- for(int i = 0;i < n;i ++)
- {
- int x , y;
- cin >> x >> y;
- x ++; //防止出现0的情况
- level[qy(x)] ++; // 前缀和结果
- add(x ,1);
- }
- for(int i = 0;i < n;i ++)
- cout << level[i] << endl;
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。