首页 > 其他分享 >D - Intersecting Intervals(abc355)

D - Intersecting Intervals(abc355)

时间:2024-07-03 12:30:59浏览次数:14  
标签:int ll abc355 mid long Intervals ans lll Intersecting

题意:有n个区间,找出俩俩区间相交的个数

分析:

设初始俩俩相交,找出不相交的(不同区间l>r),减去即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ios::sync_with_stdio(false);
    int n,l[n+10],r[n+10];
    cin>>n;
    ll ans=n*(n-1)/2;
    for(int i=1;i<=n;i++){
        cin>>l[i]>>r[i];
    }
    sort(l+1,l+n+1);
    sort(r+1,r+n+1);
    int k=1;
    for(int i=1;i<=n;i++){
        while(l[i]>r[k]){
            k++;ans--;    
        }
        
    }
    cout<<ans<<endl;
    return 0;
}//然后就超时了

用了一个二分来解决超时问题

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+10;
pair<ll,ll>a[N];
int main() {
    ll ans=0,n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].first>>a[i].second;
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++){//二分 
        ll lll=i,rr=n;
        while(lll<=rr){
            ll mid=(lll+rr)/2;
            if(a[i].second>=a[mid].first){
                lll=mid+1;
            }else{
                rr=mid-1;
            }
        }
        ans+=lll-i-1;
    }
    cout<<ans;
    return 0;
}

标签:int,ll,abc355,mid,long,Intervals,ans,lll,Intersecting
From: https://blog.csdn.net/m0_74310050/article/details/140113016

相关文章

  • [题解]AT_dp_w Intervals
    思路首先考虑较为普通的DP。定义\(dp_{i,j}\)表示在前\(i\)个位置中,最后一个1在\(j\)的最大分数,显然有:\[dp_{i,j}=\left\{\begin{matrix}\max_{k=1}^{i-1}\{dp_{i-1,k}\}+\sum_{l_k\leqj\wedger_k=i}{a_k}&(i=j)\\dp_{i-1,j}+\sum......
  • abc355f 题解
    abc355f直接贺lct维护mst的代码。思路观察到\(w_i\le10\),考虑分开建\(10\)个图表示边权小于等于\(i\)的边组成的图。连并查集,记录当前图连了\(siz_i\)条边。可以发现第\(i-1\)个图是第\(i\)个图的子图。所以差分\(siz_i-siz_{i-1}\)可以得到原图的最小生成......
  • abc355e 题解
    abc355e思路WC2024T3中知道一个技巧:如果知道区间\([l,r]\)的和就连边\(l\tor+1\),那么想推出\([L,R]\)的区间和就要求\(L\)和\(R+1\)联通。按题意把符合要求的边连上,设边权为\(1\)跑bfs,求出\(L\)到\(R+1\)的最短路并记录路径上的点,就可以得到要询问的区间。......
  • Atcoder ABC355 C~F
    C出题人太善良了,加强到\(10^5\)都没问题。考虑维护每条横线竖线两条对角线上被标记的点的个数,每次标记点后,判断是否有线上点全被标记。再考虑如何将点编号转为坐标,记编号为\(t\),推柿子:\[(x-1)\timesn+y=t\]\[nx+y=t+n\]\[x=\frac{t+n-y}{n}\]等同于找到\(y\)使得:\[n......
  • ABC355
    E将所有的下标作为点,建一张无向图。当且仅当可以询问\([l,r]\)时,在点\(l\)和\(r+1\)之间连一条边。可以发现能求出\([L,R]\)的和等价于\(L\)与\(R+1\)连通,且最少询问次数等于两点间最短路径边数。具体实现是容易的。F边权很小,提示我们可以暴力枚举和替换边。开......
  • ABC 355 D题Intersecting Intervals
    题意现在有n条线段,每条线段的左端点和右端点依次给出,求有多少对线段有交集。思路考虑正难则反的想法,我们考虑着n条线段全部两两相交的时候,那么答案就是(n-1)*n/2,现在我们要求出有多少对线段是不相交的。当两条线段不相交的时候,显然有其中一条线段的左端点严格大于另一条线......
  • ABC355 D区间相交问题
    ABC355D区间相交问题题意给出n个区间,每个区间给出左端点(l)和右端点(r),判断有多少区间成对相交。分析如果我们直接暴力查找每个区间是否和别的区间相交,那么时间复杂度就是O(\(n^2\)),肯定是过不了的。考虑如何优化,通过题意,可以发现优化的关键在于区间相交的判定方式,对于任意两......
  • ABC355
    A.WhoAtetheCake?模拟代码实现a,b=map(int,input().split())ifa==b:print(-1)else:print(6-a-b)B.Piano2模拟代码实现#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<(n);++i)usingnamespacestd;usingP=pair<......
  • D - Intersecting Intervals
    D-IntersectingIntervals 思路对于区间重合问题,经典做法对left进行排序,然后进行统计计数。写了一版TLE,反思有冗余计数问题。计算每一个区间的覆盖数目,不需要TLE版本逐个往后数,只需要使用lower_bound找出第一个大于等于ri+1 的位置,即可得到与i区间重合区间......
  • ABC355 A ~ D
    A可能写麻烦了,但是至少它对了。#include<bits/stdc++.h>#definegtgetchar#defineptputchartypedeflonglongll;constintMAXN=2e5+5;constintmod=998244353;llread(){ llx=0,f=1;charch=gt(); while(ch<'0'||ch>'......