bzoj1635 / P2879 [USACO07JAN]区间统计Tallest Cow
P2879 [USACO07JAN]区间统计Tallest Cow
差分
对于每个限制$(l,r)$,我们建立一个差分数组$a[i]$
使$a[l+1]--,a[r]++$,表示$(l,r)$区间内的数至少比$l,r$小$1$
最后统计下前缀和,顺便把最大高度加上去。
记得判重。
(逃一节晚自习真chiji)
不写了,放风时间到了。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #include<map> 6 using namespace std; 7 void swap(int &a,int &b) {a^=b^=a^=b;} 8 map <pair<int,int>,bool> mp; //bzoj 64mb 用不了bool二维 9 int n,m,mxi,id,a[10001],s; 10 int main(){ 11 scanf("%d%d%d%d",&n,&id,&mxi,&m); 12 for(int i=1,q1,q2;i<=m;++i){ 13 scanf("%d%d",&q1,&q2); 14 if(q1>q2) swap(q1,q2); 15 if(!mp[make_pair(q1,q2)]) 16 --a[q1+1],++a[q2],mp[make_pair(q1,q2)]=1; 17 } 18 for(int i=1;i<=n;++i) 19 s+=a[i],printf("%d\n",s+mxi); 20 return 0; 21 }