1. 程式人生 > 實用技巧 >最高的牛

最高的牛

最高的牛

題解:我們一開始把所有牛的高度都設為\(h\),當給出\(a\),\(b\)時,就將其內部的牛的身高都減一,用差分就好了

AC_Code;

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<set>
 5 #include<algorithm>
 6 #include<iostream>
 7 using namespace std;
 8 typedef long long ll;
 9 #define endl '\n'
10
const int maxn = 1e4+10; 11 const int inf = 0x3f3f3f3f; 12 13 int n,p,h,m; 14 int he[maxn]; 15 int main() 16 { 17 scanf("%d%d%d%d",&n,&p,&h,&m); 18 set<pair<int,int> > existed;//有重複,用來去重 19 he[1]=h; 20 for(int i=1;i<=m;i++){ 21 int a,b; 22 scanf("
%d%d",&a,&b); 23 if( a>b ) swap(a,b); 24 if( !existed.count({a,b})){ 25 existed.insert({a,b}); 26 he[a+1]--; 27 he[b]++; 28 } 29 } 30 for(int i=1;i<=n;i++){ 31 he[i]+=he[i-1]; 32 printf("%d\n",he[i]); 33
} 34 return 0; 35 }