101. 最高的牛

时间:2020-04-16
本文章向大家介绍101. 最高的牛,主要包括101. 最高的牛使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

ACwing的题

思路

要每头牛身高最高,所以两头牛可以看见是,把中间的牛都减一。要把中间的都减一,明显是前缀和加差分。而最高的牛明显不会被减,所以可以作为基准。

	printf("%d\n",h+c[i]);

注意

  • 此题中给出的关系对可能存在重复
  • 于是用map判重

代码

#include<bits/stdc++.h>
using namespace std;
inline long long read(){
	long long num=0;int z=1;char c=getchar();
	if(c=='-') z=-1;
	while((c<'0'||c>'9')&&c!='-') c=getchar();
	if(c=='-') z=-1,c=getchar();
	while(c>='0'&&c<='9') num=(num<<1)+(num<<3)+(c^48),c=getchar();
	return z*num;
}
int n,p,h,m;
bool q[10000+5][10000+5];
int c[10000+5];
int d[10000+5]; 
int main ()
{
	n=read();p=read();h=read();m=read();
//	memset(c,0,sizeof(c));
//	memset(c,0,sizeof(d));
	int a,b;
	for(int i=1;i<=m;i++)
	{
		a=read();
		b=read();
		if(a>b)swap(a,b);
		if(q[a][b])continue;
		d[a+1]--;d[b]++;
		q[a][b]=true;
	}
	for(int i=1;i<=n;i++)
	{
		c[i]=c[i-1]+d[i];
		printf("%d\n",h+c[i]);
	}
} 

  

原文地址:https://www.cnblogs.com/ruanmowen/p/12715287.html