#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> 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; if(g){ std::cout << 0 << '\n'; return 0; } //可能 ll l = 0, r = 1000000000; while(r-l>1){ ll mid = (l+r)/2; vvl q;//idx, クエリ , -1:= dowbn, -2消す //各要素について、影響を与える距離がわかる for(int i=0;i=0) s += q[idx][1], up++; if(q[idx][1]==-1) up--, down++; if(q[idx][1]==-2) down--, sub += q[idx][2]; 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; }//l no r ok std::cout << r << '\n'; return 0; }