B
user_8384735
c_cpp
3 years ago
937 B
8
Indexable
// 1224B.cpp
#include<iostream>
#include<set>
#include<vector>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
using ll = unsigned long long;
int n, m;
struct node{
ll poi;
bool x;
node (ll u = 0, bool v = 0) : poi(u) , x(v){}
bool operator < (const node y) const {
if (!this->x) return 0;
else if (!y.x) return 1;
else return y.poi > this->poi;
}
};
priority_queue<node> q;
vector<ll> x;
vector<ll> y;
int main(){
cin >> n >> m;
x.resize(n); for (ll &z : x) cin >> z;
y.resize(m); for (ll &w : y) cin >> w;
sort(y.begin(), y.end());
int k = 0, i = 1;
for (ll z : x){
if (i++ == y[k]) q.push(node(z, 1)), k++;
else q.push(node(z, 0));
}
ll res = 0;
while (q.size()){
node w = q.top();
// cout << w.x << w.poi << " " << endl;
if (w.x && res > w.poi){
res <<= 1ll;
}else res += w.poi *1ll;
q.pop();
}
cout << res;
return 0;
}Editor is loading...