#include <bits/stdc++.h>
using namespace std;
int n,m;
vector <int> ordinary;
vector <pair<int,int> > info(1001);
bool searchdate(int day){
vector <int> lastsale(n+1,-1);
for(int i=1;i<=m;i++){
if(info[i].first <= day){
lastsale[info[i].second] = max(lastsale[info[i].second],info[i].first);
}
}
vector<vector<int> > samedaysale(1001);
for(int i=1;i<=n;i++){
if(lastsale[i] != -1)
{samedaysale[lastsale[i]].push_back(i);}
}
vector <int> order = ordinary;
int curm = 0;
for(int i=1;i<=day;i++){
curm++;
if(i > 1000) continue;
for(auto iter : samedaysale[i])
{
if(curm >= order[iter]){
curm -= order[iter];
order[iter] = 0;
}
else{
order[iter] -= curm;
curm = 0;
break;
}
}
}
return accumulate(order.begin(),order.end(),0) *2 <= curm;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>m;
ordinary = vector<int>(n+1);
for(int i=1;i<=n;i++) cin>>ordinary[i];
for(int i=1;i<=m;i++){
cin>>info[i].first>>info[i].second;
}
for(int ans = 1;ans<=2000;ans++){
if(searchdate(ans)){
cout<<ans<<endl;
break;
}
}
}
Codeforces Round #560 (Div. 3)F1. Microtransactions (easy version)
最新推荐文章于 2020-08-12 21:18:33 发布