题目链接
题目大意:给你N个牛,然后告诉你那一个牛是最高的,最高是多少,然后给你T个对照,也就是在每一个牛仔平视的时候能看到那个牛,
思路:这个题目基本上就是个差分吧,就是在你选中的两头牛之间的数都减去1,设置他们的初值都是最大值,
add(a+1,-1) 和add(b,1);注意判重。这个地方真的是卡死我了,没注意到。。。
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#define maxn 10010
using namespace std;
int n;
int vis[maxn][maxn];
int m,maxx,t;
int c[maxn+1];
void adds(int x,int v)
{
while(x<=maxn)
{
c[x]+=v;
x+=1;
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&maxx,&t);
for(int i=1;i<=t;i++)
{
int x,y;scanf("%d%d",&x,&y);
if(x>y)
swap(x,y);
if(vis[x][y]==1) continue;
vis[x][y]=1;
adds(x+1,-1);
adds(y,1);
}
for(int i=1;i<=n;i++)
printf("%d\n",maxx+c[i]);
}