比赛 2025.1.18 评测结果 AAATTTTEEEEE
题目名称 Help Yourself(Gold) 最终得分 25
用户昵称 flyfree 运行时间 13.036 s
代码语言 C++ 内存使用 3.07 MiB
提交时间 2025-01-18 10:02:27
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 1010
#define mod 1000000007
// By flyfreemrn
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
inline void write(ll x){
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
//struct node_bit{
//	ll s[MAXN],siz;
//	ll lowbit(ll x){
//		return x&(-x);
//	}
//	void add(ll pos,ll val){
//		while(pos<=siz){
//			s[pos]=(s[pos]+val+mod)%mod;
//			pos+=lowbit(pos);
//		}
//	}
//	ll find(ll pos){
//		ll res=0;
//		while(pos>0){
//			res=(s[pos]+res+mod)%mod;
//			pos-=lowbit(pos);
//		}
//		return res;
//	}
//}bit[MAXN];
//struct node_line{
//	ll l,r;
//}line[MAXN];
//bool cmp(node_line a,node_line b){
//	return a.l<b.l;
//}
//ll dp[MAXN][MAXN],nxt[MAXN];
//ll n,ans;
//int main(){
//	n=read();
//	for(int i=1;i<=n;i++)bit[i].siz=n;
//	bit[1].add(1,1);
//	for(int i=1;i<=n;i++)line[i].l=read(),line[i].r=read();
//	sort(line+1,line+1+n,cmp);
//	for(int i=1;i<=n;i++){
//		for(int j=i+1;j<=n;j++){
//			if(line[j].l>line[i].r){
//				nxt[i]=j;
//				break;
//			}
//		}
//	}
//	for(int c=1;c<=n;c++){
//		for(int j=1;j<=n;j++){
//			ll _ans=bit[c].find(j);
//			bit[c].add(j+1,_ans);
//			ans=(ans+_ans*c%mod+mod)%mod;
//			cout<<c<<" "<<j<<" "<<_ans<<endl;
//			if(nxt[j]){
//				bit[c+1].add(nxt[j],_ans);
//				bit[c].add(nxt[j],-_ans);
//			}
//		}
//	}
//	cout<<ans;
//	return 0;
//}
struct node_line{
	ll l,r;
}line[MAXN];
bool cmp(node_line a,node_line b){
	return a.l<b.l;
}
ll ans,n;
void dfs(ll id,ll r,ll k){
	if(id>n){
		ans=(ans+k)%mod;
		return;
	}
	dfs(id+1,r,k);
	if(line[id].l>r)dfs(id+1,line[id].r,k+1);
	else dfs(id+1,max(line[id].r,r),k);
}
int main(){
	freopen("usaco_Feb_help.in","r",stdin);
	freopen("usaco_Feb_help.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++)line[i].l=read(),line[i].r=read();
	sort(line+1,line+1+n,cmp);
	dfs(1,0,0);
	cout<<ans<<endl;
}