``` int n; cin >> n; vector<int> v(n); for (auto &i: v) { cin >> i; } sort(v.begin(), v.end()); auto bs = [&](int l, int r, int val) { while (l < r) { int mid = (l + r) / 2; if (v[mid] > val) { r = mid; } else { l = mid + 1; } } return l; }; int ans; for (int i = 2; i < n; i++) { if (v[i - 2] + v[i - 1] > v[i]) { // binary search the minimum j s.t. v[j] + v[i - 1] > v[i] int j = bs(0, i - 2, v[i] - v[i - 1]); ans = v[j] + v[i - 1] + v[i]; break; } } for (int i = n - 3; i >= 0; i--) { if (v[i] + v[i + 1] > v[i + 2]) { ans = v[i] + v[i + 1] + v[i + 2] - ans; break; } } cout << ans; ```
点赞 1

相关推荐

牛客网
牛客企业服务