Acwing 周赛110 5046

Acw 5046

思路

dp,dpi 表示前i种药且吃第i种药使智商达到ri的方案,根据题意可知

dpi=dpj,(rj[li,ri1])

先将各区间按右端点排序, 求j的区间可用二分.

代码

//9.24
int n,m,k;
int f[N],s[N];

//acw 110

struct seg 
{
	int l,r;
	bool operator <(const seg &a) const
	{
		if(r!=a.r) return r<a.r;
		return l<a.l;		
	}
}w[N];

int get_l(int x) 
{
	int l=1,r=m+1;
	while(l<r) 
	{
		int mid=(l+r)/2;
		if(w[mid].l<=x) l=mid+1;
		else r=mid; 
	}
	return r;
}

int get_r(int x)
{
	int l=1,r=m+1;
	while(l<r) 
	{
		int mid=(l+r+1)/2;
		if(w[mid].r<=x) l=mid;
		else r=mid-1; 
	}
	return r;
 } 


void solve() 
{
	cin>>n>>m;
	
	for(int i=2;i<=m+1;i++) cin>>w[i].l>>w[i].r;
	sort(w+1,w+m+2);
		
	int res=0;
	f[1]=1,s[1]=1;
	for(int i=2;i<=m;i++) 
	{
		int l=get_l(w[i].l);
		int r=get_r(w[i].r);
		
		f[i]=(s[r]-s[l-1])%mod;
		s[i]=(s[i-1]+f[i])%mod;
		if(w[i].r>=n) res=(res+f[i])%mod;
	}
	cout<<(res+mod)%mod<<endl;
	
} 
posted @   Liang2003  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示