Pagini recente » Cod sursa (job #67465) | Cod sursa (job #2600978) | Cod sursa (job #2177327) | Cod sursa (job #2092370) | Cod sursa (job #2670383)
#include <bits/stdc++.h>
using namespace std;
const int MMAX = 1e6 + 5;
const int INF = (1 << 30);
int main()
{
ifstream fin("orase.in");
ofstream fout("orase.out");
int M, N;
fin >> M >> N;
vector <pair <int, int>> city(N);
for (int i = 0;i < N;++i)
{
int d, l;
fin >> d >> l;
city[i] = make_pair(d, l);
}
sort(city.begin(), city.end());
int answer = -INF;
vector <int> best(M + 1, -INF);
for (int i = 0, j = 0;i < N;i = j)
{
int mx = -INF;
while (j < N && city[i].first == city[j].first)
{
if (mx != -INF)
answer = max(answer, city[j].second + mx);
mx = max(mx, city[j].second);
++j;
}
best[city[i].first] = mx;
}
vector <int> dp(M + 1, -INF);
for (int i = 0;i <= M;++i)
{
if (i > 0 && dp[i - 1] != -INF)
dp[i] = dp[i - 1] + 1;
if (best[i] != -INF && i > 0 && dp[i - 1] != -INF)
answer = max(answer, dp[i - 1] + 1 + best[i]);
dp[i] = max(dp[i], best[i]);
}
fout << answer << "\n";
fin.close();
fout.close();
return 0;
}