题解:打眼一看,给的i有
个p用 ,
随便找个
什么占位的读入了。
然后会想到开始将所有牛的高度都设为最高 然后 如果i能看见j就把i-j区间都减一 显然这样是不行的QAQ
偷偷看了一下题解 听说了一个叫差分序列的东西,其实这道题还是个模拟,注意判断区间重复的情况 要跳过
代码贴上:
#include<bits/stdc++.h>
#define ll long long
#define mp(x,y) make_pair(x,y)
const int INF = 0x7fffffff;
const double eps = 1e-5;
using namespace std;
int read()
{
int x = 0 , f = 1; char ch = getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f*=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}
return x * f;
}
int a[100010];
map<pair<int,int>,bool>p;
int main()
{
int n,maxh,m,s;
n = read(),s = read(),maxh = read(),m=read();
for(int i = 1 ; i <= m ; i++)
{
int x= read(), y = read();
if(x > y) swap(x,y);
if(p[mp(x,y)]) continue;
p[mp(x,y)] = true; //防止区间重复
a[x+1]--;
a[y]++;
}
int ans=0;
for(int i=1;i<=n;i++)
ans+=a[i],printf("%d\n",maxh+ans);
}