这道题是个区间覆盖类的题目,可以这样入手:依次模拟解雇第i个员工,然后求出该情况下的区间大小,最后求最大值。
import java.util.*;
import java.io.*;
import java.math.BigInteger;
public class Main{
static FastReader sc =new FastReader();
static PrintWriter out = new PrintWriter(System.out);
public static void main(String[] args) throws Exception
{
int n=sc.nextInt();
ArrayList<PIIs> list=new ArrayList<PIIs>();
for(int i=0;i<n;++i)
{
list.add(new PIIs(sc.nextInt(), sc.nextInt()));
}
list.sort(new Comparator<PIIs>() {//自定义的PIIs需要重载比较
public int compare(PIIs a,PIIs b)
{
if(a.getFirst()-b.getSecond()!=0) return a.getFirst()-b.getFirst();
return a.getSecond()-b.getSecond();
}
});
int res=0;
for(int i=0;i<n;i++)
{
int last=-1,sum=0;
for(int j=0;j<n;j++)
{
if(i==j) continue;
int start=list.get(j+1).getFirst();
int end=list.get(j+1).getSecond();
if(start>last)//求区间覆盖长度
{
sum+=end-start;
last=end;
}
else if(last<end) {
sum+=end-last;
last=end;
}
}
res=Math.max(res, sum);
}
System.out.println(res);
}
}
class PIIs{
private int first;
private int second;
public int getFirst()
{
return this.first;
}
public int getSecond()
{
return this.second;
}
public PIIs(int first,int second)
{
this.first=first;
this.second=second;
}
}
class FastReader
{
BufferedReader br;
StringTokenizer st;
public FastReader()
{
br=new BufferedReader(new InputStreamReader(System.in));
}
String next()
{
while(st==null || !st.hasMoreElements())
{
try
{
st=new StringTokenizer(br.readLine());
}
catch(IOException e)
{
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt()
{
return Integer.parseInt(next());
}
long nextLong()
{
return Long.parseLong(next());
}
double nextDouble()
{
return Double.parseDouble(next());
}
String nextLine()
{
String str="";
try
{
str=br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return str;
}
}