Idées:
La réponse à la signification de la question est la somme de tous les nombres ==
correspondants qui sont plus grands que l'actuel
plus tous
les nombres ==
correspondants qui sont plus petits que l' actuel
.
Le principe est très simple, pour les données 1e5 écrivez directement une structure à trier comme valeur clé, puis utilisez les points de contrôle de préfixe et calculez la réponse.
Il convient de noter que la réponse nécessite la plus grande valeur, et dans le processus, faites attention
à la condition de == dans la question , utilisez donc map pour juger de la
position initiale actuelle pour
vérifier la situation de ==.
Code:
import java.util.Scanner;
import java.util.HashMap;
import java.util.*;
class node implements Comparable<node>
{
int x, y;
public node(int x, int y){
this.x = x;
this.y = y;
}
public int compareTo(node a) {
if (this.x != a.x)
return this.x-a.x;
else
return this.y-a.y;
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
node a[] = new node[100010];
for (int i = 1; i <= n; i ++){
int x = in.nextInt();
int y = in.nextInt();
a[i] = new node(x, y);
}
Arrays.sort(a, 1, n+1);
int [] pre1 = new int[100010];
int [] pre0 = new int[100010];
for(int i = 1; i <= n; i ++){
pre1[i] = pre1[i-1]+a[i].y;
pre0[i] = i-pre1[i];
// System.out.println("i: " + i + " pre0: " + pre0[i] + " pre1: " + pre1[i]);
}
int tmp = 0, ans = 0, pos = 1;
Map<Integer, String> mp = new HashMap<Integer, String>();
for (int i = 1; i <= n; i ++) {
if( mp.get(a[i].x)!="1"){
pos = i-1;
mp.put(a[i].x, "1");
}
// System.out.println("pos: " + pos);
int res = pre1[n]-pre1[i - 1]+pre0[pos]-pre0[1];
// System.out.println("res: " + res);
if (res >= tmp) {
if (a[i].x > ans) {
tmp = res;
ans = a[i].x;
}
}
}
System.out.println(ans);
}
}