public int debug(int[] L, int[] R, int m) { var n = L.Length; var src = n + m + 8; var sink = n + m + 9; var G = new MinCostFlow(n + m + 10); for (int i = 1; i <= m; i++) { G.AddDirectedEdge(n + i, sink, 1, 0); } for (int i = 0; i < n; i++) { G.AddDirectedEdge(src, i, 1, 0); for (int j = 1; j <= L[i]; j++) { G.AddDirectedEdge(i, n + j, 1, 0); } for (int j = R[i]; j <= m; j++) { G.AddDirectedEdge(i, n + j, 1, 0); } G.AddDirectedEdge(i, sink, 1, 1); } var cost = G.Execute(src, sink); return(cost.Value); }