View Code of Problem 4057

#include<bits/stdc++.h>
using namespace std;
struct node{
	int date;
	int k;
};
bool cmp(int x,int y){
	return x>y;
}
int main(){
	int n;
	while(cin>>n){
		node z[n+5];
		int minx=-1;
		for(int i=1;i<=n;++i){
			scanf("%d",&z[i].date);
			minx=max(minx,z[i].date);
		}
		
		for(int i=1;i<=n;++i)
		scanf("%d",&z[i].k);
		vector<int>v[minx+10];
		int sum=0;
		for(int i=1;i<=n;++i){
			sum+=z[i].k;
			v[z[i].date].push_back(z[i].k);
		}
		for(int i=1;i<=minx;i++){
			if(v[i].size()!=0)
			sort(v[i].begin(),v[i].end(),cmp);
		}
		for(int i=1;i<=minx;i++){
			int d=-1,len,p=0;
			if(v[i].size()!=0)len=i+v[i].size()-1;
			else len=minx;
			for(int m=i;m<=len;++m){
				if(v[m].size()!=0){
					if(d<v[m][0]){
						d=v[m][0];
						p=m;
					}
				}
			}
			if(p!=0){
				sum-=v[p][0];
				v[p].erase(v[p].begin());
			}
		}
		cout<<sum<<endl;
	}
}

Double click to view unformatted code.


Back to problem 4057