题解|#2D Rank Finding

  • 题目考点:二维偏序

  • 题目大意:对于二维坐标里面每个点,寻找该点左下角的点的个数(包括同X、同Y轴上面的点)

  • 先说WA思路(还没想好为什会错,后面知道了再来补充):把所有坐标先按X轴优先排序,再按Y轴优先排序,取两次排序该点最小的位置,于是出现了下图。。。 alt 思路乍一看好像没什么问题,但越想越奇怪,究竟什么原因还不知道。

  • AC思路:二维偏序,将X轴排序后,离散化Y轴,用树状数组维护每个Y轴的前缀数量即可。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;
typedef long long LL;

const int N = 300010, M = N*2;

struct Node
{
    int x, y, rank_y;
    int id;
}a[M];

int n, tr[M], ans[M];
int tot[M];

bool cmp(Node A, Node B)
{
    if(A.x == B.x) return A.y<B.y;
    return A.x < B.x;
}

void solve()
{
    for(int i = 1; i <= n; i++)
    {
        int y = a[i].y;
        a[i].rank_y = upper_bound(tot+1, tot+n+1, y)-tot-1;
        //cout << "**" << y << ' ' << a[i].rank_y << '\n';
    }
}

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

void add(int t, int c)
{
    for(int i = t; i <= N; i += lowbit(i)) tr[i] += c;
    return ;
}

int que(int t)
{
    int res = 0;
    for(int i = t; i; i -= lowbit(i)) res += tr[i];
    return res;
 }

int main()
{
    scanf("%d", &n);

    for(int i = 1; i <= n; i++)
    {
        scanf("%d%d", &a[i].x, &a[i].y);
        a[i].id = i;
        tot[i] = a[i].y;
    }

    sort(tot+1, tot+n+1); // 离散化Y轴
    solve();

    sort(a+1, a+n+1, cmp);
    for(int i = 1; i <= n; i++)
    {
        int y = a[i].rank_y;
        int id = a[i].id;   

        ans[id] = que(y);  // 树状数组维护前缀点数
        add(y, 1);
    }

    for(int i = 1; i <= n; i++) printf("%d ", ans[i]);

    return 0;
}


题解专栏 文章被收录于专栏

希望不断进步

全部评论

相关推荐

昨天 11:18
门头沟学院 Java
作者先叠个甲:本人双非本,秋招拿到了多个大厂offer,这个过程也不容易,但是在看到很多秋招胜利之后说自己一路有多艰辛的文章,总感觉有一点不对劲,想了很久打算写一篇文章分析一下,本文仅代表作者观点,不认同的可以在评论区大家一起理性讨论。&nbsp;秋招已经结束,各类社交平台出现一大批“大厂上岸”胜利结算。文章的叙事逻辑高度相同,开篇就渲染焦虑和困惑,学习时的挑灯夜读、投递时的屡屡碰壁、面试时的如履薄冰,将过往经历包装成一步艰辛的“奋斗史”,然后最终以大厂offer的胜利结尾,字里行间全是苦尽甘来的优越感。但是在我看来,这类文章的本质是结果导向的、带有浮夸的叙事,因为其内核不是分享经验,而是借“苦难”之名...
创作小队长:你的批判视角非常犀利,尤其“结果决定叙事权”的洞察非常精准,哈哈想邀请你来成为我们的创作者🫰 但我想补充一个视角:许多分享者的初衷并非炫耀结果或者苦难,我更愿意相信他们在这个过程中付出了很多,在这场战役结束后,他们迫不及待地想被看到,记录和分享都是给自己的一个交代,而非真的教会别人什么,他们的初衷未必是想制造焦虑。求职市场的残酷、经济环境的下行、世俗价值观才是这种叙事流行的土壤,作为一个普通人无法抵抗洪流。 感谢你发起这场讨论。理想的社区,既需要这样锐利的批判来保持清醒,你的洞察非常犀利,也许会启发一些人,能逐渐改变这种叙事~
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务