CF101B Buses
题目链接
题意分析
计数问题跑DP 这是常识原谅我第一时间没有想出来
我们用dp[i]表示搭乘第i辆车下车的方案数
最终的答案 就是把所有终点站ti=n的车下车的方案数累加
现在考虑怎么转移
我们先把所有车按照终点站排序
对于第i辆车 查找哪些车会停在[si,ti-1] 将这些车的方案累加到dp[i]上
用于终点站是单调的 所以我们可以使用二分确定
由于有贡献的车必然是一段连续的区间 所以我们通过前缀和优化累加
CODE:
#include
#define N 300080
#define mod 1000000007
using namespace std;
int n,m;
struct Node
{
int s,t;
friend bool operator <(const Node &A,const Node &B)
{return A.t>1;
if(e[mid].t>=e[i].s) {tmp1=mid;ri=mid-1;}
else le=mid+1;
}
le=1;ri=i-1;
while(le<=ri)
{
int mid=(le+ri)>>1;
if(e[mid].t