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 }
View Code

 

posted @ 2018-11-22 21:01  kafuuchino  阅读(146)  评论(0编辑  收藏  举报