首页 > 其他分享 >Non-Puzzle: Segment Pair

Non-Puzzle: Segment Pair

时间:2023-08-14 23:35:09浏览次数:35  
标签:Non 包含 int 500005 back push v2 Pair Segment

Non-Puzzle: Segment Pair
时间限制(普通/Java):2000MS/4000MS 内存限制:262144KByte

描述

输入

输出

样例输入

3
1 4 6 7
2 5 3 5
1 3 5 7

样例输出

2

思路

枚举区间左端点 x,则要满足区间的交包含x,并且不包含 x − 1。

考虑计算包含 x 的方案数,则每对区间的贡献为0,1 或 2(代表有几个区间包含点 x),方案数就是所有贡献的乘积。

然后要扣除包含 x − 1 的方案数。实质上扣除的是同时包含 x 和 x − 1两个点的方案数,同样是若干个 0, 1, 2 的乘积。

对 x 作扫描线,实时维护 0, 1, 2 的个数。

AC代码

#include <bits/stdc++.h>
using namespace std;
int mod=1e9+7;
vector<int>v1[500005],v2[500005];
int t[500005],p2[500005];
void solve()
{
    int n,ans=0,sum=0,now=0;
    cin>>n;
    p2[0]=1;
    for(int i=1;i<=n;i++)
        p2[i]=p2[i-1]*2%mod;
    int a,b;
    for(int i=1;i<=n;i++)
    {
        cin>>a>>b;
        v1[a].push_back(i);
        v2[b].push_back(i);
        cin>>a>>b;
        v1[a].push_back(i);
        v2[b].push_back(i);
    }
    for(int i=1;i<500005;i++)
    {
        for(int j : v1[i])
        {
            t[j]++;
            if(t[j]==1) sum++;
            if(sum==n) (ans+=p2[now])%=mod;
            if(t[j]==2) now++;
        }
        for(int j : v2[i])
        {
            t[j]--;
            if(t[j]==0) sum--;
            if(t[j]==1) now--;
        }
    }
    cout<<ans<<endl;
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int _=1;
//    cin>>_;
    while(_--)
    {
        solve();
    }
}

标签:Non,包含,int,500005,back,push,v2,Pair,Segment
From: https://www.cnblogs.com/minz-io/p/17630064.html

相关文章

  • Non-Puzzle: Segment Pair
    题意给n对区间,要求每对区间恰好选一个使得选出来的n个区间有交集,问有多少方案数1≤n,l1,l2,r1,r2≤5×10^5思路枚举结果以i为左端点的区间的数量,对于每个i,以i为左端点的区间的数量=结果包含i的数量-结果同时包含i和i-1的数量.对于每对区间,如果两个区间没有重叠部分,那么这......
  • 2023牛客暑期多校训练营9--I Non-Puzzle: Segment Pair
    思路:直接枚举区间左端点,用一个cnt数组表示当前端点l,r或者L,R存在1个还是2个或者0个。用一个sum变量记录有多少段区间覆盖了该端点,如果sum==n那么这个端点就有了贡献。更详细的看代码注释。#include<bits/stdc++.h>usingnamespacestd;#defineIOSios::sync_with_stdio(fa......
  • 2023牛客多校第九场 D Non-Puzzle: Error Permutation
    题意给定一个长度为n的序列,计算有多少个子区间满足子区间第K小的数不在子区间第K位。 找出所有不满足条件的区间。枚举所有的ai和左端点al,找出满足ai是区间[l,r]中第r-l+1小的右端点r,则右端点r一定是一段区间。例如   342165         l i ......
  • 23牛客多校9 I Non-Puzzle: Segment Pair
    也许更好的阅读体验\(\mathcal{Description}\)给\(n\)对区间,要求每对区间恰好选一个使得选出来的\(n\)个区间有交集,问有多少方案数\(1\len,l_i,r_i\le5×10^5\)\(\mathcal{Solution}\)注意到区间的值域也是\(5×10^5\),考虑从值域入手,也就是枚举每个点看有多少种方案使最后......
  • DP vs Non DP
    我们对知识的探究来源于探寻规律,而许多规律性的问题可以分出阶段进行递推解决,这样就形成了DP。DP非常有用,但它并不能取代找规律的过程。即使是多阶段决策问题,发现一些规律可能比直接使用DP更加简单。例子:你有\(n\)个字母A,\(m\)个字母B,你可以将这些字母组成成为一个字......
  • 【Oracle】CBO统计信息是基于dba_segment 还是dba_tables?
    答案是:来自dba_tables验证过程---首先创建t2,查看当前user_segment以及user_tables信息createtablespacedamondba_tbs01;createuserdamondbaidentifiedbydamondba_tbs01DEFAULTTABLESPACEdamondba_tbs01quotaunlimitedondamondba_tbs01;grantdbatod......
  • TZOJ3326--Barn Repair(优先队列,贪心)
    题目简述: 某天刮了一阵大风,把牛棚的门吹飞了,总共有s个牛棚,幸运的是并不是每个牛棚都有牛。现在你可以购买m块木板,商店里有各种型号的木板,木板长度为多少就需要多少金钱。木板用来给牛棚装上门。要求把所有有牛的牛棚都装上门,并且花的金钱最少。给了一正整数C,接下来C行每行一......
  • python 判空 is None 和 if not None 对比
    Thanksforcomments.Ihavetestedtheperformbetweenthese:importtimeitdefusing_is_none(variable):returnvariableisNonedefusing_if_not_none(variable):returnnotvariablevariable=Noneprint("Using'isNone':",......
  • Striving for Simplicity and Performance in Off-Policy DRL: Output Normalization
    发表时间:2020(ICML2020)文章要点:这篇文章基于SAC做简单并且有效的改进来提升效果。作者首先认为SAC里面的entropy是为了解决actionsaturationduetotheboundednatureoftheactionspaces,这个意思就是说动作空间假如约束到[0-1],动作通常会在0和1两个端点处,而加了entropy可......
  • ethereum错误之nonce too low
    根据提供的错误信息error(*github.com/ethereum/go-ethereum/rpc.jsonError)*{Code:-32000,Message:"noncetoolow",Data:interface{}nil},这是一个来自以太坊的JSON-RPC错误。该错误的含义是“noncetoolow”,即“交易序号(nonce)过低”。在以太坊中,每个账户都有一个交......