Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <vector>
- using namespace std;
- #define int long long
- signed main() {
- int n, m;
- cin >> n >> m;
- vector<int> day(n), k(m + 2);
- for (int i = 0; i < n; ++i) {
- cin >> day[i];
- day[i]--;
- }
- for (int i = 1; i <= m; ++i) {
- cin >> k[i];
- }
- int l = -1, r = n;
- while (r - l > 1) {
- vector<pair<int, int>> loc;
- vector<bool> used(m, 0);
- int mid = (r + l) / 2;
- for (int i = mid; i >= 0; --i) {
- if (data[i] != -1 && !used[day[i]]) {
- used[day[i]] = true;
- loc.emplace_back(day[i], i);
- }
- }
- reverse(loc.begin(), loc.end());
- if (loc.size() < m) {
- l = mid;
- }
- int busy = 0;
- bool good = true;
- for (int i = 0; i < loc.size(); ++i) {
- int have = loc[i].second - busy;
- if (have >= k[loc[i].first]) {
- busy += k[loc[i].first] + 1;
- } else {
- good = false;
- break;
- }
- }
- if (!good) {
- l = mid;
- } else {
- r = mid;
- }
- }
- if (r == n) {
- cout << -1;
- return 0;
- }
- cout << r + 1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment