P6144 [USACO20FEB]Help Yourself P(DP+线段树)

P6144 [USACO20FEB]Help Yourself P

将线段按照了 \(r\) 排序,设右端点为 \(r\) 的答案为 \(f_r\),发现这样转移非常困难。

\(\color{yellow}{\bigstar\texttt{Trick}}\):区间覆盖的题要按照左端点排序,记右端点为 \(r\) 时的答案为 \(f_r\)

考虑 \(k=1\) 时怎么做,加入一条线段,

  • 对于 \([1,l-1]\)合法 \(f_i\),可以连通块个数加上 \(1\) 累加到 \(f_r\)
  • 对于 \([l,r]\)\(f_i\) 直接累加到 \(f_r\)
  • 对于 \([r+1,n]\)\(f_i\) 数值乘上 \(2\) 后累加到 \(f_i\),这条线段可以选或不选。

对于 \(k>1\),维护答案的 \([0,k]\)的所有值 ,\(x^k\rightarrow (x+1)^k=\sum_{i=0}^k\binom{k}{i}x^i\),预处理系数后 \(\mathcal{O(k)}\) 加即可。

#define Maxn 100005
#define Maxk 11
#define mod 1000000007
int n,m,k;
int C[Maxk][Maxk];
inline int MOD(int x){ return (x>=mod)?(x-mod):x; }
struct Seg
{int l,r;Seg(int L=0,int R=0):l(L),r(R){}bool friend operator < (Seg x,Seg y) { return x.l<y.l; }
}s[Maxn];
struct TREE
{int a[Maxk],muti;TREE(){ memset(a,0,sizeof(a)),muti=1; }inline friend TREE operator + (TREE x,TREE y){TREE ret;for(int i=0;i<=k;i++) ret.a[i]=MOD(x.a[i]+y.a[i]);return ret;}inline void Push(int x){ for(int i=0;i<=k;i++) a[i]=1ll*a[i]*x%mod; muti=1ll*muti*x%mod; }
};
TREE tree[Maxn<<3],adx;
inline void pushdown(int p)
{if(tree[p].muti>1)tree[p<<1].Push(tree[p].muti),tree[p<<1|1].Push(tree[p].muti),tree[p].muti=1;
}
void change(int p,int nl,int nr,int x)
{if(nl==nr) { tree[p]=adx; return; }int mid=(nl+nr)>>1; pushdown(p);if(mid>=x) change(p<<1,nl,mid,x);else change(p<<1|1,mid+1,nr,x);tree[p]=tree[p<<1]+tree[p<<1|1];
}
void Times(int p,int nl,int nr,int l,int r)
{if(nl>=l && nr<=r) { tree[p].Push(2); return; }int mid=(nl+nr)>>1; pushdown(p);if(mid>=l) Times(p<<1,nl,mid,l,r);if(mid<r) Times(p<<1|1,mid+1,nr,l,r);tree[p]=tree[p<<1]+tree[p<<1|1];
}
TREE query(int p,int nl,int nr,int l,int r)
{if(nl>=l && nr<=r) return tree[p];int mid=(nl+nr)>>1; pushdown(p);if(mid>=l && mid<r)return query(p<<1,nl,mid,l,r)+query(p<<1|1,mid+1,nr,l,r);else if(mid<r) return query(p<<1|1,mid+1,nr,l,r);else return query(p<<1,nl,mid,l,r);
}
int main()
{C[0][0]=1;for(int i=1;i<=10;i++){C[i][0]=1;for(int j=1;j<=i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;}n=rd(),k=rd(),m=n<<1;for(int i=1,l,r;i<=n;i++) l=rd(),r=rd(),s[i]=Seg(l,r);sort(s+1,s+n+1); adx=TREE(),adx.a[0]=1;change(1,0,m,0);for(int T=1;T<=n;T++){Times(1,0,m,s[T].r+1,m);adx=query(1,0,m,0,s[T].l-1);TREE ret;for(int i=0;i<=k;i++) for(int j=0;j<=i;j++)(ret.a[i]+=1ll*C[i][j]*adx.a[j]%mod)%=mod;adx=ret+query(1,0,m,s[T].l,s[T].r);change(1,0,m,s[T].r);}printf("%d\n",tree[1].a[k]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Desert King POJ - 2728

题意&#xff1a; 给定N个平面上的点的坐标和它们的权值&#xff0c;任意两点之间的边的价值是它们的距离&#xff0c;费用是两点权值之差的绝对值&#xff0c;求该图的一棵生成树&#xff0c;使得该树所有边的费用之和与价值之和的比值最小&#xff08;只需求这个比值即可&am…

洛谷P3338:力(FFT)

传送门 解析 算是比较适合的FFT入门题了吧 一个重要的trick&#xff1a; 当函数无法表示成卷积时&#xff0c;可以把函数翻转过来 然后调一调就又是卷积了 一个重要的注意事项是FFT的lim一定是两多项式相乘结果多项式的项数&#xff01; 即使后面的项根本没有用也一样 其他的…

CF650E-Clockwork Bomb【并查集】

正题 题目链接:https://www.luogu.com.cn/problem/CF650E 题目大意 给出nnn个点的两棵树&#xff0c;你每次可以选择第一棵树上的一条边改成另一条边&#xff0c;但是改完之后必须还是一棵树&#xff0c;求最少的步数把第一棵树改成第二棵树。 1≤n≤51051\leq n\leq 5\times…

[2-sat专练]poj 3683,hdu 1814,hdu 1824,hdu 3622,hdu 4115,hdu 4421

文章目录Priest Johns Busiest DaycodePeaceful CommissioncodeLets go homecodeBomb GamecodeEliminate the ConflictcodeBit MagiccodePriest John’s Busiest Day 题目 司仪必须在婚礼开始或结束时出现&#xff0c;考虑把第iii场婚礼拆成两个点 iii&#xff1a;表示司仪在婚…

.NET Core中的一个接口多种实现的依赖注入与动态选择

最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式&#xff0c;为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中&#xff0c;但是在服务调用的时候总是获取到最后注入的那个方法的实现&#xff0c;这时候就在想能不能实现动态的选…

Sightseeing Cows POJ - 3621

题意&#xff1a; L个点&#xff0c;P边的点边带权的有向图&#xff0c;求一个环点权和与边权和比值的最大值。 题解&#xff1a; 01分数规划判负环 详细看这里 还是套用01分数规划模型&#xff0c;点权为value[i],边权为cost[u],一个环为C&#xff0c;问题要求最大化 最…

CF559E Gerald and Path(DP)

CF559E Gerald and Path 设 \(dp(i,p)\) 表示完成前 \(i\) 条线段的覆盖&#xff0c;最右端位于 \(p\) 点的最大收益。 转移&#xff1f;向下一条线段转移时加上他们中间的距离&#xff1f;发现这样没有办法统计 \(p\) 点以前的空位了&#xff01; \(\color{yellow}{\bigstar\t…

多项式乘法:练习总结

文章目录前言力代码礼物代码差分和前缀和代码开拓者的知识代码总结前言 这两天由于国庆集训全是阴间的生成函数&#xff0c;所以就学了一点点相关的内容 其实就学了个FFT和NTT 也算是点开了一个小小的技能点吧 进入多项式才发现里面世界的广阔 然而由于这玩意没有一个是NOIP考…

CF1444C-Team-Building【可撤销并查集】

正题 题目链接:https://www.luogu.com.cn/problem/CF1444C 题目大意 给出nnn个点mmm条边的一张图&#xff0c;总共kkk个颜色&#xff0c;每个点有一个颜色。 询问有多少无序颜色对(x,y)(x,y)(x,y)满足x≠yx\neq yx​y且颜色为xxx或yyy的点构成的生成子图是一个二分图。 1≤…

C# Memory Cache 踩坑记录

背景前些天公司服务器数据库访问量偏高,运维人员收到告警推送,安排我团队小伙伴排查原因.我们发现原来系统定期会跑一个回归测试,该测运行的任务较多,每处理一条任务都会到数据库中取相关数据,高速地回归测试也带来了高频率的数据库读取.解决方案1我们认为每个任务要取的数据大…

模板:无旋treap

文章目录前言操作合并分裂插入删除查找第k大查询x的排名前驱后继完整代码所谓无旋treap&#xff0c;就是不带旋转的treap 前言 现在“理论上”我会四种平衡树了 之前说无旋treap功能弱&#xff0c;是我狗眼看银低了qwq 这玩意区间上该搞的也能搞 而且确实是非常的 好写&#x…

[贪心专题]CF549G,CF351E,CF226D,CF1276C,CF1148E,CF798D

文章目录T1&#xff1a;CF1276C Beautiful RectangletitlesolutioncodeT2&#xff1a;CF226D The tabletitlesolutioncodeT3&#xff1a;CF549G Happy LinetitlesolutioncodeT4&#xff1a;CF798D Mike and distributiontitlesolutioncodeT5&#xff1a;CF351E Jeff and Permut…

51nod1766-树上的最远点对【结论,线段树】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1766 题目大意 给出nnn个点的一棵树&#xff0c;mmm次询问给出两个区间&#xff0c;要求在两个区间中各选一个点使得他们之间距离最大。 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 结论就是两…

P3385 【模板】负环

P3385 【模板】负环 题意&#xff1a; 给定一个 n 个点的有向图&#xff0c;请求出图中是否存在从顶点 1 出发能到达的负环。 负环的定义是&#xff1a;一条边权之和为负数的回路。 题解&#xff1a; 先说结论&#xff1a; 判断给定的有向图中是否存在负环。 利用 spfa 算…

LOJ洛谷P1248加工生产调度(贪心、Johnson 法则)

解析 和国王游戏一样的做法 容易写出cmp函数的依据&#xff1a; min(u.a,v.b)<min(u.b,v.a)但是这个题的比较函数有一个取min的操作 这个东西会有一个问题&#xff1a;不满足不可比性的传递性 通俗的说&#xff0c;xy,yz,但是x不一定z 比如说如果y的a和b都很小&#xff0c…

【数位DP】CF 54C,509C,431D,628D,855E,1245F,95D

这一次有题解了&#xff01;&#xff01;T1&#xff1a;CF54C First Digit LawtitlesolutioncodeT2&#xff1a;CF509C Sums of DigitstitlesolutioncodeT3&#xff1a;CF431D Random TasktitlesolutioncodeT4&#xff1a;CF628D Magic NumberstitlesolutioncodeT5&#xff1a;…

CF1007E Mini Metro(DP 化散为整,将状态压缩)

CF1007E Mini Metro 有 \(N\) 个站台&#xff0c;从左往右编号为 \(1,2,\cdots,n\)&#xff0c;每个站台初始时(\(0\) 时刻)有 \(a_i\) 个人&#xff0c;从 \(0\) 时刻初开始游戏。 每个时刻&#xff0c;会依次发生如下事件&#xff1a; 你可以选择召唤 \(0\) 辆、一辆或多辆向…

AT2070-[ARC061D]3人でカードゲーム/Card Game for Three【计数,组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/AT2070 题目大意 有三堆卡牌各有n,m,kn,m,kn,m,k张&#xff0c;每张上写了a/b/ca/b/ca/b/c&#xff0c;对于第1/2/31/2/31/2/3堆卡牌。然后开始从第一堆拿牌&#xff0c;然后根据拿到的牌在对应的堆拿牌。 如果到一堆拿牌时…

C#如何安全、高效地玩转任何种类的内存之Memory(三)

前言我们都知道&#xff0c;.Net Core是微软推出的一个通用开发平台&#xff0c;它是跨平台和开源的&#xff0c;由一个.NET运行时、一组可重用的框架库、一组SDK工具和语言编译器组成&#xff0c;旨在让.Net developers可以更容易地编写高性能的服务应用程序和基于云的可伸缩服…

LOJ:黑暗城堡(最短路)

题目描述 求一个图关于1的最小路径树的方案数 解析 想复杂了qwq 跑dij的时候如果dis[now]wdis[to]&#xff0c;就使cnt[to] 如果更新dis&#xff0c;cnt赋值成1 最后乘起来即可 本题可以这样应该是因为由于边权均正&#xff0c;所以所有点的选取方案是独立的 所以直接上乘法…