Portal: Tokitsukaze y Soldado
significado de las preguntas: Pick n soldados de un equipo de combate de gran valor, cada soldado tiene dos propiedades y v s, v representa la lucha, s representación en la que el equipo no puede ser mayor que s. Buscando valor máximo de la lucha.
Práctica: es para todos los soldados de acuerdo con la orden ascendente, cada vez que el soldado como un soldado debe ser añadido, se ha agregado a los soldados en la cola de prioridad en orden descendente por v, cuando pq.size ()> s soldados corriente, pasó de cola de pop-ahora-top (). v, grabado en el máximo ahora.
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
struct ac{
int v,s;
bool operator <(const ac& a)const {
return v>a.v;
}
}a[maxn];
bool cmp(ac a1,ac a2){
if(a1.s==a2.s) return a1.v>a2.v;
return a1.s>a2.s;
}
priority_queue<ac> pq;
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d%d",&a[i].v,&a[i].s);
}
sort(a+1,a+1+n,cmp);
long long now=0,ans=0;
int i=0;
a[0].s=n+10;
for(int i=1;i<=n;++i){
now+=a[i].v;
while(pq.size()>0&&pq.size()+1>a[i].s){
now-=pq.top().v;
pq.pop();
}
pq.push(a[i]);
ans=max(ans,now);
}
cout<<ans<<endl;
return 0;
}