• CF1462F Solution


    题目翻译

    题解

    容易想到(O(n^2))的暴力,也就是对于每个区间依次枚举与之有重叠的区间。但是时间复杂度只允许在(O(nlogn))及以内,因此需要考虑优化。

    若使两个区间(i,j)重叠,只需满足(r_jge l_i)且$l_jle r_i (,当然)i,j(可以互换,但为了不重复计数令)i(区间在左侧。进一步思考可知,所有满足)l_j> r_i (的)j(一定满足)r_jge l_i(,因此用满足)r_jge l_i(的)j(的个数,减去满足)l_j> r_i (的)j(的个数即可得到与)i(重叠的区间个数。下面的代码用二分在)logn$的时间中完成了上述解法,其实理论上离散化后用前缀和的方法也可得出解(但是写挂了QAQ)。

    AC代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e5+10,inf=0x3f3f3f3f;
    int al[N],ar[N],l[N],r[N];
    int main()
    {
    	int t,n;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++)
    		{
    			scanf("%d%d",&al[i],&ar[i]);
    			l[i]=al[i],r[i]=ar[i];
    		}
    		sort(l+1,l+n+1); sort(r+1,r+n+1);
    		int ans=inf;
    		for(int i=1;i<=n;i++)
    		{
    			int qwq=upper_bound(l+1,l+n+1,ar[i])-l,qaq=lower_bound(r+1,r+n+1,al[i])-r;
    			ans=min(ans,n-qwq+qaq);
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    实习一面+二面+三面面经
    内核协议栈2
    android之activity生命周期图
    gcc1
    实习一
    android之startActivityForResult
    KFS
    android之使用DDMS帮助开发
    设计模式——工厂模式
    博客备份工具(博主网)开发略谈
  • 原文地址:https://www.cnblogs.com/violetholmes/p/14220568.html
Copyright © 2020-2023  润新知