首页 > 其他分享 >P6146 [USACO20FEB]Help Yourself G 题解

P6146 [USACO20FEB]Help Yourself G 题解

时间:2023-04-01 17:55:34浏览次数:54  
标签:cnt P6146 Help int 题解 线段 加进来 复杂度

题目链接

先按左端点从小到大排序。

设 \(f(i)\) 表示前 \(i\) 条线段的所有子集的复杂度之和。

考虑从 \(f(i-1)\) 转移到 \(f(i)\),即考虑新加进来第 \(i\) 条线段的过程。第 \(i\) 条线段加进来所新产生的贡献分两种:

  1. 设除了第 \(i\) 条线段选中的线段集合为 \(S\),则若 \(S\) 中存在一条线段与第 \(i\) 条线段有交,即不产生新的复杂度。

  2. 反之,若 \(S\) 中所有线段都和 \(i\) 没有交(即 \(\forall j\in S,r_j<l_i\)),此时产生 \(1\) 的新复杂度。

容易推出第 \(i\) 条线段产生的复杂度为 \(f(i-1)+2^{cnt}\),其中 \(cnt\) 为第 \(1\sim i-1\) 条线段中与第 \(i\) 条线段没有交的线段条数。所以 \(f(i)=2f(i-1)+2^{cnt}\)。

计算 \(cnt\) 就在每个右端点处打个标记然后前缀和一下即可。

时间复杂度 \(O(n\log n)\),瓶颈在排序。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=1e5+10,P=1e9+7;
int n,pre[N<<1],dp[N];
pii a[N];
int qpow(int x,int p){
	int res=1;
	while(p){
		if(p&1){
			res=1LL*res*x%P;
		}
		x=1LL*x*x%P;
		p>>=1;
	}
	return res;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&a[i].first,&a[i].second);
		pre[a[i].second]++;
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n*2;i++){
		pre[i]+=pre[i-1];
	}
	for(int i=1;i<=n;i++){
		dp[i]=(2LL*dp[i-1]%P+qpow(2,pre[a[i].first-1]))%P;
	}
	printf("%d",dp[n]);
	return 0;
}

标签:cnt,P6146,Help,int,题解,线段,加进来,复杂度
From: https://www.cnblogs.com/Jerry-Jiang/p/17279004.html

相关文章

  • # P4391 [BOI2009]Radio Transmission 无线传输 题解
    [BOI2009]RadioTransmission无线传输题目描述给你一个字符串\(s_1\),它是由某个字符串\(s_2\)不断自我连接形成的(保证至少重复\(2\)次)。但是字符串\(s_2\)是不确定的,现在只想知道它的最短长度是多少。输入格式第一行一个整数\(L\),表示给出字符串的长度。第二行给出......
  • 4.1 模拟赛题解
    A一模一样讲过B先做一遍前缀和将区间和转成两数之差的形式。cdq分治,递归时排好序。按顺序枚举左端点,合法的右端点区间单调移动。CIDA*,容易发现每次翻转并不会打乱中间的铁盘,只会改变下边界的相邻关系。最终顺序相邻两个铁盘大小相差均为\(1\),所以估价函数设为已操作次数......
  • 使用 IntelliJ IDEA 构建 Spring Framework 5.3.21 源码问题解决
    源码版本1、下载地址:https://github.com/spring-projects/spring-framework/tags2、选择要构建的源码版本并下载,例如:5.3.21相关环境1、操作系统:Windows102、JDK版本:Jdk173、IDE工具:IntelliJIDEA2021.3.34、项目构建工具:Gradle7.3.3使用IntelliJIDEA构建Spring......
  • CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!)(CF1810)A~D题题解
    今天采用的是新格式。CF1810ABeautifulSequence点击查看原题点击查看思路如果一个数字的值\(v\),不大于当前的位置\(p\),那我们可以通过删除\(p-v\)个数字,使它们两个对应上。比如\([1,7,2,5,3]\)中的\(3\),其数值为\(3\),位置为\(5\),数值\(3\)小于等于\(......
  • CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!) A-D题解
    题目地址A-BeautifulSequence题意:给出一个数组,问是否存在任意一个子区间,存在i,使得ai=iSolution直接比较当前的数和i的大小就行了,当前为x,如果要求答案存在,必须有i>=xvoidsolve(){ intn;cin>>n; intflag=0; for(inti=1;i<=n;i++) { intx;cin>>x; if(i>=x) {......
  • Thinkpad T14升级Windows11ver22h2失败问题解决小记
    背景手头的ThinkPad在近一年的时间里每次升级Windows11的22h2版本每次都会报错,具体有以下几种情况:更新过程中无问题,重启后黑屏更新过程中会卡在26%左右,然后蓝屏报KENERAL_CHECK_FAIL,接着便自动重启进入修复程序在WindowsUpdate更新中报错0xC1900101在上述错误出现后,再次更......
  • 使用 wine 安装微信遇到的问题解决方法
    1.中文显示成方块添加启动环境变量:LANG=zh_CN.UTF-82.输入框不显示文字安装winetrickssudoaptinstallwinetricks#oryay-Sywinetricks然后安装riched20winetricksriched20......
  • 无所畏惧的求和题解
    无所畏惧的求和题解本题是本人目前出的题中难度最高的题。可能可以评一个黑?可能有点过,但是紫色是肯定可以的。题目链接:无所畏惧的求和-洛谷尽情享受吧!这道题其实做法有很多:待定系数法+矩阵求解推代数公式组合数学+待定系数法推组合公式第一类斯特林数(时......
  • Arduino 外接 DS3132 读数为2165/165/165问题解决
    即使SCL/SDA不接线,DS3132也会返回,这个值为2165/165/165因此问题的来源为接线不牢靠。接线牢靠的标准:RTC模块(ZS-042)上的PWR灯应该常亮,并且亮度很大(我一开始接线,PWR亮度小,而且闪烁)RTC的SCL接Arduino的A4,SDA接Arduino的A5.The165indicatesthatthedatalinefor......
  • CF629C题解
    CF629C这里更容易进入且有翻译题意给定长度为\(m\)的仅含(和)的字符串,为其左右补上两个字符串使其达到指定长度\(n\)且合法,需补足字符串合计长度\(n-m\)满足\(n-m\le2000\)。解析字符串合法条件为:左右括号总数相等;从左数起在任意位置上左括号数量不小......