首页 > 其他分享 >2023牛客暑期多校训练营9--I Non-Puzzle: Segment Pair

2023牛客暑期多校训练营9--I Non-Puzzle: Segment Pair

时间:2023-08-14 22:15:40浏览次数:33  
标签:Non -- sum 多校 back int vec 端点 push

思路:

直接枚举区间左端点,用一个cnt数组表示当前端点l,r或者L,R存在1个还是2个或者0个。用一个sum变量记录有多少段区间覆盖了该端点,如果sum==n那么这个端点就有了贡献。

更详细的看代码注释。

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define int long long
const int N=5e5+7;
const int LINF=1e13+7;
const int MOD=1e9+7;
bool C=0;
vector<int> vec[N*2];
int cnt[N];
void solve(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int x,y;
        cin>>x>>y;
        vec[x*2-1].push_back(i);
        vec[y*2].push_back(i);
        cin>>x>>y;
        vec[x*2-1].push_back(i);
        vec[y*2].push_back(i);
    }
    int res=0; //统计答案
    int sum=0; //当前区间个数(不同i下的),当sum==n的时候代表这个点有贡献
    int now=1; //当前点的贡献
    int ni2=500000004; //1/2在1e9+7下的逆元
    for(int i=1;i<N*2;i++){
        for(auto it:vec[i]){
            if(i%2==1){ //奇数为区间起点
                if(cnt[it]==0){
                    cnt[it]=1;
                    sum++;
                    if(sum==n) res=(res+now)%MOD;
                }
                else{
                    cnt[it]=2;
                    if(sum==n) res=(res+now)%MOD; //先加后乘,因为其中一个在上面加过了
                    now=now*2%MOD;
                }
            }
            else{ //偶数为区间终点
                cnt[it]--;
                if(cnt[it]==0) sum--;
                else now=now*ni2%MOD;
            }
            
        }
    }
    cout<<res<<endl;

}
signed main(){
    IOS;
    int t;
    if(C) cin>>t;
    else t=1;
    while(t--) solve();
}

 

标签:Non,--,sum,多校,back,int,vec,端点,push
From: https://www.cnblogs.com/Feintl/p/17629890.html

相关文章

  • 如何在工作中利用Prompt高效使用ChatGPT?
    导读AI不是来替代你的,是来帮助你更好工作。用betterprompt使用chatgpt,替换搜索引擎,让你了解如何在工作中利用Prompt高效使用ChatGPT。01背景现在GPT已经开启了人工智能狂潮,不过是IT圈,还是金融圈。一开始,我觉的它就是一个增强版搜索引擎,在使用了一段时间之后,才发现它......
  • Nginx返回的css样式不加载
    不小心修改了nginx.conf,之前的配置全部丢失。好在配置项挺少,就只开启了gzip和转发请求时在请求头中添加原始ip。奇怪的是,部分项目打开后样式丢失。查看控制台,css文件能够正常下载。注意到css的content-type,为text/plain:这样问题原因就很明确了,应该是gzip的配置问题。只要在se......
  • Amazon EMR Hudi 性能调优——Clustering
    随着数据体量的日益增长,人们对Hudi的查询性能也提出更多要求,除了Parquet存储格式本来的性能优势之外,还希望Hudi能够提供更多的性能优化的技术途径,尤其当对Hudi表进行高并发的写入,产生了大量的小文件之后,又需要使用Presto/Trino对Hudi表进行高吞吐的即席查询的场景里。......
  • SpringBoot 启动流程追踪(第二篇)
    上一篇文章分析了除refresh方法外的流程,并着重分析了load方法,这篇文章就主要分析refresh方法,可以说refresh方法是springboot启动流程最重要的一环,没有之一。try{ //Allowspost-processingofthebeanfactoryincontextsubclasses. postProcessBeanFactory(bea......
  • rust 中#[inline]
    在Rust中,#[inline]是一个属性(attribute),用于告诉编译器对函数进行内联展开。内联展开是一种编译器优化技术,它将函数的代码直接嵌入到调用处,而不是通过函数调用的方式执行。这样做可以减少函数调用的开销,提高程序的执行效率,但也会增加代码的体积。在Rust中,#[inline]属性可以应用于......
  • c++20 format基本使用
    下面代码是一个使用format的例子#include<iostream>#include<cmath>#include<format>intmain(){doubleprincipal{1000};doublerate{0.5};std::cout<<std::format("Initialprincipal:{:>7.2f}\n",principal);......
  • 快速排序
    参考:快速排序算法C++实现(超详细解析!!!!)_c++快速排序_sunny-ll的博客-CSDN博客开发者1024-知乎(zhihu.com)......
  • 2023-08-14 CSP-J模拟联考 游记
    8:00 赶到 FZ,9:00正式开考。开考前先洗了一把脸。9:00~9:15开T1,原本没有思路,但后来想到可以贪心,每次找到<n 的最大的斐波那契数。于是打了个斐波那契的表,就过了。9:15~10:00T2写了45分钟我是什么东西。一开始想法是把每一个字符的数量统计起来,如果相差<1就满足要求,否......
  • 关于一类求前 k 优解的问题
    当我们要求某个问题的前\(k\)优局面的时候,我们可以考虑用堆贪心来实现。其实这个堆贪心本质上是在做dijkstra一样的东西。我们考虑对于每个局面(状态)构造一个转移\(trans(S)\),它导出\(O(1)\)个转移,且满足:若\(S\)转移到\(T\),则权值满足单调性:\(val(T)\geval(S)\),也......
  • NFLS 训练总结 2(updating)
    前言接上周。Day6总体情况1000+1200+1400+1700+1800+1408+0+300=8808,rk83大寄,为什么他们分都那么高啊!T1从T1就开始卡。简单的贪心,买票最少就是每个大人都尽量带孩子,而最多就是所有孩子都由一个大人带。如果没有大人只有孩子,就是“Impossible”。然后有人Impossibl......