UESTC 1584

Posted 十年换你一句好久不见

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UESTC 1584相关的知识,希望对你有一定的参考价值。

http://acm.uestc.edu.cn/#/problem/show/1584

Washi与Sonochi的约定

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 131072/131072KB (Java/Others)


Submit  Status
Sonochi,明年再一起看烟花。——Washiosumi
技术分享


为了实现和Sonochi的约定,Washi必须要打败眼前强大的怪物。
怪物分布在二维平面上,
某个怪物的rank被定义为x坐标不大于其x坐标,且y坐标不大于其y坐标的怪物的数量。(不含其自身)
Washi要你输出n行,每行一个整数,分别代表rank为0~n?1的怪物数量。

Input

输入第一行为一个正整数n,
接下来n行,第ii行两个整数xi、yi,表示一个怪物的坐标。
保证输入的坐标两两不同。

Output

包含n行,每行一个整数,第ii行的数代表rank为i?1i?1的怪物数量

Sample Input Sample Output 5 1 1 5 1 7 1 3 3 5 5 1 2 1 1

0

Hint

1≤n≤100000
1≤xi≤100000

1≤yi≤100000

树状数组+排序

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int ran[100006];
int vis[100006],n;
struct Node
{
    int x,y;
}node[100006];
bool cmp(const Node &a,const Node &b)
{
    if(a.x!=b.x) return a.x<b.x;
    else return a.y<b.y;
}
int main()
{
    scanf("%d",&n);
    memset(vis,0,sizeof(vis));
    memset(vis,0,sizeof(ran));
    for(int i=0;i<n;i++)
    {
        scanf("%d%d",&node[i].x,&node[i].y);
    }
    sort(node,node+n,cmp);
    for(int i=0;i<n;i++)
    {
        int ans=0;
        for(int j=node[i].y;j;j-=(j&-j))
            ans+=vis[j];
        ran[ans]++;
        for(int j=node[i].y;j<100006;j+=(j&-j))
            vis[j]++;
    }
    for(int i=0;i<n;i++)
    {
        printf("%d\n",ran[i]);
    }
    return 0;
}

 




















以上是关于UESTC 1584的主要内容,如果未能解决你的问题,请参考以下文章

优化算法迭代扩展卡尔曼滤波算法(IEKF)含Matlab源码 1584期

环状序列(UVa1584)

leetcode打卡——1584. 连接所有点的最小费用

hdu 1584 蜘蛛纸牌

HDU 1584(蜘蛛牌 DFS)

Circular Sequence UVa1584