日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup

發布時間:2024/4/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

Farmer John 決定給他的奶牛們照一張合影,他讓 N (1 ≤ N ≤ 50,000) 頭奶牛站成一條直線,每頭牛都有它的坐標(范圍: 0..1,000,000,000)和種族(0或1)。 一直以來 Farmer John 總是喜歡做一些非凡的事,當然這次照相也不例外。他只給一部分牛照相,并且這一組牛的陣容必須是“平衡的”。平衡的陣容,指的是在一組牛中,種族0和種族1的牛的數量相等。 請算出最廣闊的區間,使這個區間內的牛陣容平衡。區間的大小為區間內最右邊的牛的坐標減去最做邊的牛的坐標。 輸入中,每個種族至少有一頭牛,沒有兩頭牛的坐標相同。

?

Solution

設s[i]為前i頭牛為1的牛數-為0的牛數

顯然對于合法區間(l,r],s[l]==s[r]

掃一遍對于每個s統計下最左和最右就行了

秒之

?

Code

1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=1e5+5; 5 6 struct cow{ 7 int dfn,dis; 8 bool operator<(const cow&b) 9 const{return dis<b.dis;} 10 }a[maxn]; 11 int s[maxn],l[maxn],r[maxn]; 12 int n; 13 14 int main(){ 15 scanf("%d",&n); 16 for(int i=1;i<=n;i++) 17 scanf("%d%d",&a[i].dfn,&a[i].dis); 18 sort(a+1,a+n+1); 19 20 for(int i=1;i<=n;i++){ 21 if(a[i].dfn) s[i]=s[i-1]+1; 22 else s[i]=s[i-1]-1; 23 int x=s[i]+n; 24 if(!l[x]) l[x]=i; 25 else r[x]=i; 26 } 27 28 int ans=0; 29 for(int i=0;i<=2*n;i++) 30 if(l[i]&&r[i]) ans=max(ans,a[r[i]].dis-a[l[i]+1].dis); 31 printf("%d\n",ans); 32 return 0; 33 }

?

轉載于:https://www.cnblogs.com/xkui/p/4562402.html

總結

以上是生活随笔為你收集整理的【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。