課題を最速で終わらせるためには、課題の課された日にちが早い順から順番に終わらせていくことが最適です。
二要素について、要素を昇順に並び替えるには C++ では pair 型を用いると簡単に行うことができます。
#include<bits/stdc++.h> using namespace std; int main(){ long long n, m; cin >> n >> m; vector<pair<long long, long long>> p(m); for(int i = 0; i < m; i++){ cin >> p[i].first >> p[i].second; } sort(p.begin(), p.end()); long long ans = 0; for(int i = 0; i < m; i++){ long long l = p[i].first, c = p[i].second; ans = max(ans + c, l + c - 1); } cout << ans << "\n"; }