UESTC 842 天下归晋(树状数组)

思路:按x轴排序之后,树状数组维护y轴


#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000+500;
int c[maxn],ans[maxn];
struct Node
{
	int x,y;
}a[maxn];
bool cmp(Node a,Node b)
{
	if(a.x==b.x)
		return a.y<b.y;
	return a.x<b.x;
}
int lowbit(int x){return x&(-x);}
void update(int i,int d)
{
	while(i<=maxn)
	{
		c[i]+=d;
		i+=lowbit(i);
	}
}
int query(int x)
{
	int ans = 0;
	while(x)
	{
		ans+=c[x];
		x-=lowbit(x);
	}
	return ans;
}

int main()
{
    int n;
	while(scanf("%d",&n)!=EOF)
	{
		memset(c,0,sizeof(c));
		for(int i = 1;i<=n;i++)
			scanf("%d%d",&a[i].x,&a[i].y),a[i].y++;
		sort(a+1,a+1+n,cmp);
		for(int i = 1;i<=n;i++)
		{
            ans[query(a[i].y)]++;
			update(a[i].y,1);
		}
		for(int i = 0;i<n;i++)
			printf("%d\n",ans[i]);
	}
}


Description

晋朝统一天下已有十年,曹魏、孙吴、蜀汉这些曾与天下相争的王朝,都成为了过眼云烟,仅留于故事之中。

“爷爷,讲嘛讲嘛,再讲一次赤壁之战的故事嘛!”

“你个死小子,都讲多少遍了,还听!”

“就是想听打仗嘛!”

“你小子啊…行,我就再讲一次。当时曹公率领八十万大军欲渡长江,那船队规模才叫一壮观啊,长江都铺成陆地啰。当时是这样部署的….”

曹操的船队自西向东铺于长江之上,为了方便指挥,每艘船都被赋予了相应的等级。这个等级由该船西南方船只的数量决定,即不比该船靠东并且不比该船靠北的船的数目。那是一只多么庞大的船队啊,只惜周郎一把火,樯橹灰飞烟灭……

“太刺激了,打仗好好玩啊!爷爷你怎么那么清楚当时的事儿,你的腿就是赤壁时断的吗?”

通天的火光,被激流卷去的兄弟,无数的惨叫,折断后砸向自己左腿的船柱…

看了眼激动的孙子,老者咂咂嘴,淡淡说道:“爬山采药时摔的”。

Input

第一行,一个整数$n$表示曹军船只的数量。

接下来$n$行,每行一个对整数$x_i,y_i$。表示第$i$艘船的坐标。

数据保证不会有两艘船在同一位置。

$1 \leq n \leq 100000,0 \leq x_i,y_i \leq 32000$

Output

$n$行,每行$1$个整数,分别表示从$0$级到$n - 1$级的船的数量。

行末不要有空格。

Sample Input


1 1 
5 1 
7 1 
3 3 
5 5



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值