其他分享
首页 > 其他分享> > 【YBTOJ进阶训练指导】星星问题【树状数组】

【YBTOJ进阶训练指导】星星问题【树状数组】

作者:互联网

在这里插入图片描述

思路:

一道经典的二维偏序

c o d e code code

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int n, c[1010000], ans[1010000];
struct node
{
	int x, y;
}a[1010000];

bool cmp(node x, node y)
{
	if(x.x!=y.x)
		return x.x<y.x;
	else return x.y<y.y;
}

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

void add(int x, int y)
{
	for(; x<=32010; x+=lowbit(x))
		c[x]+=y;
}

int query(int x)
{
	int sum=0;
	for(; x>=1; x-=lowbit(x))
		sum+=c[x];
	return sum;
}

int main()
{
	scanf("%d", &n);
	for(int i=1; i<=n; i++)
		scanf("%d%d", &a[i].x, &a[i].y), a[i].x++, a[i].y++;
	sort(a+1, a+1+n, cmp);
	for(int i=1; i<=n; i++)
	{
		ans[query(a[i].y)]++;
		add(a[i].y, 1);
	}
	for(int i=0; i<n; i++)
		printf("%d\n", ans[i]);
	return 0;
}

标签:node,return,进阶,树状,int,YBTOJ,sum,include,1010000
来源: https://blog.csdn.net/liuziha/article/details/123238591