リンク:ロボットの取り外し
自閉症は予想していませんでした。
違法なスキームは計算するのが難しいという容認できる発見を考慮してください。
計算できてもほぼn ^ 2です。
dpの左側が右側に影響することを考慮して、最初にdpの右側、次に左側を検討します。
dpについては、f [i]が非常に多くの点i〜nを持つ解の数を表すのは当然です。
影響を受けない右側の最初の点がwであるとします。次に、f [i] + = f [i + 1] + f [w]という遷移があります。
したがって、左から右へdpはすべての計画を計算できます。
const ll MAXN=200010;
ll n,ans,top;
ll f[MAXN],g[MAXN],s[MAXN];
struct wy
{
ll x,y;
inline ll friend operator <(wy a,wy b){return a.x<b.x;}
}t[MAXN];
int main()
{
freopen("1.in","r",stdin);
get(n);
rep(1,n,i)
{
ll get(x);ll get(y);
t[i]=(wy){x,x+y-1};
}
sort(t+1,t+1+n);
g[n+1]=1;
fep(n,1,i)
{
f[i]=i;
while(top&&t[i].y>=t[s[top]].x)
{
f[i]=max(f[i],f[s[top]]);
--top;
}
s[++top]=i;
g[i]=(g[i+1]+g[f[i]+1])%mod;
}
putl(g[1]);
return 0;
}