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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup

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

1637: [Usaco2007 Mar]Balanced Lineup

Time Limit:?5 Sec??Memory Limit:?64 MB
Submit:?697??Solved:?463
[Submit][Status][Discuss]

Description

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

Input

行 1: 一個整數: N 行 2..N + 1: 每行兩個整數,為種族 ID 和 x 坐標。

Output

行 1: 一個整數,陣容平衡的最大的區間的大小。

Sample Input

7
0 11
1 10
1 25
1 12
1 4
0 13
1 22

Sample Output

11

HINT

?

輸入說明?


有7頭牛,像這樣在數軸上。?


輸出說明?

牛 #1 (at 11), #4 (at 12), #6 (at 13), #7 (at 22) 組成一個平衡的最大的區間,大小為 22-11=11 個單位長度。?
?

?

Source

Silver

?

Analysis

前綴和qwq

記種族1為1,種族0為-1,求得這個數軸上的每頭牛的前綴和

當兩頭牛的前綴和相同的時候,他們之間的1族牛和0族牛就是一樣多的

但是不能直接選 i 和 j 的前綴和,應該比較 i-1 和 j

因為是 他們之間的1族牛和0族牛一樣多

一個左開右閉區間嗯

具體實現不難

?

Code

1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #define maxn 1000000 5 using namespace std; 6 7 int n,race[maxn],ans,pos[maxn]; 8 9 struct cow{ 10 int race,pos; 11 }list[maxn]; 12 13 struct edge{ 14 int from,pos; 15 }e[maxn]; 16 17 int tot,first[maxn]; 18 void insert(int val,int pos){ 19 tot++; e[tot].from = first[val]; e[tot].pos = pos; first[val] = tot; 20 } 21 22 bool cmp(const cow &a,const cow &b){ 23 return a.pos < b.pos; 24 } 25 26 bool cmp2(const cow &a,const cow &b){ 27 if(a.race == b.race) return a.pos < b.pos; 28 else return a.race < b.race; 29 } 30 31 //int find(int x){ 32 // int L = 1,R = n,mid; 33 // while(L < R){ 34 // mid = (L+R)/2; 35 // if(list[mid].) 36 // } 37 //} 38 39 int main(){ 40 scanf("%d",&n); 41 42 for(int i = 1;i <= n;i++){ 43 scanf("%d%d",&race[i],&pos[i]); 44 if(!race[i]) race[i]--; 45 list[i].race = race[i],list[i].pos = pos[i]; 46 } 47 48 sort(list+1,list+1+n,cmp); 49 50 for(int i = 2;i <= n;i++){ 51 list[i].race += list[i-1].race; 52 insert(list[i].race,list[i].pos); 53 } 54 55 for(int i = 1;i <= n;i++){ 56 int p = first[list[i-1].race]; 57 p = e[p].pos; 58 // printf("~%d %d\n",i,p); 59 ans = max(p-list[i].pos,ans); 60 } 61 62 printf("%d",ans); 63 64 return 0; 65 } qwq

?

轉載于:https://www.cnblogs.com/Chorolop/p/7574531.html

總結

以上是生活随笔為你收集整理的[BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup的全部內容,希望文章能夠幫你解決所遇到的問題。

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