Skip to content

Instantly share code, notes, and snippets.

@ducphanduyagentp
Created November 5, 2014 16:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ducphanduyagentp/19cae21dda9d13e7fe0d to your computer and use it in GitHub Desktop.
Save ducphanduyagentp/19cae21dda9d13e7fe0d to your computer and use it in GitHub Desktop.
#include <bits/stdc++.h>
#define f0(i,n) for(__typeof(n) i=0;i<n;i++)
#define rep(i,a,b) for(__typeof(b) i=a;i<=b;i++)
#define read(s) freopen(s , "r" ,stdin)
#define write(s) freopen(s , "w" , stdout)
using namespace std;
struct BIT{
int N,logn;
vector < int > data;
void init(int n){
N = 1 , logn = 0;
while( N < n ) N <<= 1 , logn++;
data.assign(N+1,0);
}
void update(int x,int val){ for( ; x <= N ; x += x & -x ) data[x] += val; }
int get(int x){
int res = 0;
for( ; x > 0 ; x -= x & -x ) res += data[x];
return res;
}
int find(int node,int level,int val){
for(int i = level - 1 ; i >= 0 ; i -- ){
if ( val > data[node-(1<<i)] ) val -= data[node-(1<<i)];
else return find(node-(1<<i),i,val);
}
return node;
}
int find(int val){
if (data[N]<val) return 0;
return find(N,logn,val);
}
};
const int MAXN = (int)1e6+7;
int N,K;
int a[MAXN];
BIT pos;
long long sum = 0;
void input(){
scanf("%d %d" ,&N,&K);
rep(i,1,N) scanf("%d" ,&a[i]) , sum += 1LL * a[i];
pos.init(N);
}
int bs(int L,int R,int key){
int l = L , r = R , m = l + r >> 1;
while( l != m && r != m ){
if (pos.get(m) >= key) r = m;
else l = m+1;
m = l + r >> 1;
}
rep(m,l,r) if(pos.get(m)==key) return m;
return -1;
}
void solve(){
rep(i,1,N) pos.update(i,1);
int H = 0;
while( 1<<H < pos.N ) H++;
while(K--){
int p;
scanf("%d" ,&p);
int rpos = pos.find(p);
if(rpos == 0) continue;
pos.update(rpos,-1);
sum -= a[rpos];
}
printf("%lld\n", sum);
}
int main(){
input();
solve();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment