区間の両端だけを気にすればいい。
class EelAndRabbit {
public:
int getmax(vector <int> l, vector <int> t)
{
const int N = l.size();
vector<double> T;
int mx = 1;
for (int i = 0; i < N; ++i) {
for (int j = i + 1; j < N; ++j) {
vector<double> cand;
cand.push_back(t[i]);
cand.push_back(t[i] + l[i]);
cand.push_back(t[j]);
cand.push_back(t[j] + l[j]);
for (int a = 0; a < cand.size(); ++a) {
for (int b = 0; b < cand.size(); ++b) {
set<int> vis;
for (int k = 0; k < N; ++k) {
if (t[k] + l[k] >= cand[a] && cand[a] >= t[k]) {
vis.insert(k);
}
if (t[k] + l[k] >= cand[b] && cand[b] >= t[k]) {
vis.insert(k);
}
}
mx = max(mx, (int)vis.size());
}
}
}
}
return mx;
}