[bzoj1635]最高的牛

初始如果没有限制,很显然每一头牛高度都是h
当只有一个限制,让h[a]到h[b]的高度都减1即可
容易发现两个限制不会相交(否则必然矛盾),只会包含或相离,因此没有影响,直接差分/线段树即可
(注意:1.不保证a<b;2.可能会有重复)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct ji{
 4     int x,y;
 5 }a[10005];
 6 int n,m,h,b[10005];
 7 bool cmp(ji x,ji y){
 8     return (x.x<y.x)||(x.x==y.x)&&(x.y<y.y);
 9 }
10 int main(){
11     scanf("%d%*d%d%d",&n,&h,&m);
12     for(int i=1;i<=m;i++){
13         scanf("%d%d",&a[i].x,&a[i].y);
14         if (a[i].x>a[i].y)swap(a[i].x,a[i].y);
15     }
16     sort(a+1,a+m+1,cmp);
17     for(int i=1;i<=m;i++)
18         if ((a[i].x!=a[i-1].x)||(a[i].y!=a[i-1].y)){
19             b[a[i].x+1]--;
20             b[a[i].y]++;
21         }
22     for(int i=1;i<=n;i++)printf("%d\n",h+=b[i]);
23 }
View Code

猜你喜欢

转载自www.cnblogs.com/PYWBKTDA/p/11849511.html