【洛谷】P1204 [USACO1.2]擠牛奶Milking Cows
阿新 • • 發佈:2022-05-25
題解:
觀察到時間最大是1e6,考慮簡單差分。
邊界判斷與一般差分不同,l處++,r本身處--。
最後掃描一遍計數即可。
#include<iostream> using namespace std; int main() { int n,l,r,p[1000006],tot=0,mx=0,mn=0x7fffffff; int ans1=0,ans2=0,lin1=0,lin2=0; cin>>n; for(int i=1;i<=n;++i) { cin>>l>>r; p[l]View Code++,p[r]--; mx=max(mx,r); mn=min(mn,l); } for(int i=mn;i<=mx;++i) { if(!tot) { if(tot+p[i]) { ans2=max(ans2,lin2); lin1=1; } else lin2++; } else {if(!(tot+p[i])) { ans1=max(ans1,lin1); lin2=1; } else lin1++; } tot+=p[i]; } cout<<ans1<<' '<<ans2<<endl; return 0; }
解題過程出錯:
差分思路不清晰。最開始考慮l處打+1標記,r處打-1標記,錯在如果有邊界重合無法判斷。