#include #include #include #include #include #include #include #include #include #include #include #include #define vll vector #define vvvl vector #define vvl vector> #define VV(a, b, c, d) vector>(a, vector(b, c)) #define VVV(a, b, c, d) vector(a, vvl(b, vll (c, d))); #define re(c, b) for(ll c=0;c tp; int main(int argc, char const *argv[]) { ll n, m;std::cin >> n >> m; vll a(n);get(a); //区画 人数 和 vvl d = VV(n, 0, 0, ll); re(i, m){ ll x, w;scanf("%lld %lld", &x,&w); d[x-1].push_back(w); } ll al = 0; re(i, n){ ll s = 0; for(auto e:d[i]) s += e; al += s; if(s>=a[i]){ std::cout << -1 << '\n'; return 0; } } bool g = true; re(i, n) { if(a[i]<=al) { g = false; break; } } if(g){ std::cout << 0 << '\n'; return 0; } //可能 ll l = 0, r = 1000000000; while(r-l>1){ ll mid = (l+r)/2; vector q;//idx, クエリ , -1:= dowbn, -2消す //各要素について、影響を与える距離がわかる for(int i=0;i(q[idx])==i){ ll num = get<1>(q[idx]); if(num>=0) s += num, up++; else if(num==-1) up--, down++; else down--, sub += get<2>(q[idx]); idx++; } cost[i] = s; s -= sub; } bool f = true; for(int i=0;i=a[i]){ f = false; break; } } if(f) r = mid; else l = mid; } std::cout << r << '\n'; return 0; }