Submission #798051

#TimeUsernameProblemLanguageResultExecution timeMemory
798051YassirSalamaGarage (IOI09_garage)C++14
100 / 100
1 ms340 KiB
#include <iostream> #include <vector> #include <algorithm> #include <unordered_map> #include <set> #include <unordered_set> #include <iomanip> #include <cmath> #include <limits> #include <map> #include <utility> #include <cctype> #include <string> #include <cstring> #include <stack> #include <queue> #include <functional> #include <iterator> using namespace std; #define OVL(x,s) for(auto y:x) cout<<y<<s; cout<<"\n"; #define dbg(x) cout << "[ " << #x << " ] : " << x<<endl; #define endl "\n" #define pb push_back #define F first #define S second #define ll long long #define mod 1000000007 #define all(v) v.begin(),v.end() #define int long long const int MAXN=200; const int MAXM=2100; int arr[MAXN]; int w[MAXM]; signed main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int n; int m; cin>>n>>m; for(int i=1;i<=n;i++) cin>>arr[i]; for(int i=1;i<=m;i++) cin>>w[i]; set<int> s; for(int i=1;i<=n;i++) s.insert(i); map<int,int> mp; queue<int> qq; int ans=0; for(int i=0;i<2*m;i++){ int x; cin>>x; if(x>0){ qq.push(x); int node=qq.front(); auto it=s.begin(); if(it==s.end()){ continue; }else{ int c=*it; ans+=w[node]*arr[c]; s.erase(it); mp[node]=c; qq.pop(); } }else{ int npark=mp[-x]; mp.erase(-x); s.insert(npark); if(!qq.empty()){ int node=qq.front(); auto it=s.begin(); if(it==s.end()){ continue; }else{ int c=*it; ans+=w[node]*arr[c]; s.erase(it); mp[node]=c; qq.pop(); } } } } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...