正题

金牌导航 数据结构优化DP-1


题目大意

平面上有n个点,让你选择若干点,连接x坐标相邻的点,其中连续上升或下降的为一段,问你有多少中选择方案,使得段数为k


解题思路

设fi,j,0/1f_{i,j,0/1}fi,j,0/1​为到第i个点,已经有j段,且第j段下降/上升的方案数

那么分类讨论:

1.先上升后下降
2.连续下降
3.先下降后上升
4.连续上升

对于找满足的转移点,可以建树状数组解决


代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 100010
#define wyc 100007
using namespace std;
int n, m, x, a[N], g[N];
struct Tree
{int num, c[N];void add(int x, int y){num = (num + y) % wyc;for (; x <= 100000; x += x&-x)c[x] = (c[x] + y) % wyc;return;}int ask(int x){int sum = 0;for (; x; x -= x&-x)sum = (c[x] + sum) % wyc;return sum; }int askk(int x){return (num + wyc - ask(x)) % wyc;}
}T[11][2];
bool cmp(int x, int y)
{return g[x] < g[y];
}
int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; ++i){scanf("%d%d", &x, &a[i]);g[a[i]] = x;}sort(a + 1, a + 1 + n, cmp);for (int i = 1; i <= n; ++i){T[0][0].add(a[i], 1);//没有连边的点T[0][1].add(a[i], 1);for (int j = 1; j <= m; ++j){T[j][1].add(a[i], (T[j][1].ask(a[i] - 1) + T[j - 1][0].ask(a[i] - 1)) % wyc);//先上升和先下降T[j][0].add(a[i], (T[j][0].askk(a[i]) + T[j - 1][1].askk(a[i])) % wyc);}}printf("%d", (T[m][0].ask(100000) + T[m][1].ask(100000)) % wyc);return 0;
}

【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)相关推荐

  1. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)

    正题 luogu 3287 金牌导航 数据结构优化DP-5 题目大意 有n个玉米,给出高度,你可以选择一个区间,使这个区间的玉米高度+1,你可以进行k次这样的操作,查询你操作完后最长不下降子序列最大值 ...

  2. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)

    正题 luogu 7302 金牌导航 数据结构优化DP-4 题目大意 在坐标轴上会出现n个金币,第i个金币tit_iti​时在wiw_iwi​出现(只出现一个单位时间),价值为sis_isi​,当你t ...

  3. 【树状数组】递增子序列(金牌导航 数据结构优化DP-1)

    递增子序列 金牌导航 数据结构优化DP-1 题目大意 给出一个序列,让你求长度为m的单调递增子序列的个数 输入样例 3 2 1 1 2 7 3 1 7 3 5 9 4 8 输出样例 2 12 数据范围 ...

  4. 树形DP+树状数组 HDU 5877 Weak Pair

    1 //树形DP+树状数组 HDU 5877 Weak Pair 2 // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 3 // 这道题要 ...

  5. 【DP】【线段树】基站选址(luogu 2605/金牌导航 数据结构优化DP-2)

    正题 luogu 2605 金牌导航 数据结构优化DP-2 题目大意 有若干个村庄在一条直线上,距离第一个村庄did_idi​,在该村庄建立基站要花费cic_ici​,如果在离该村不大于sis_isi ...

  6. dp 树状数组 逆序元组

    wmq的队伍 发布时间: 2017年4月9日 17:06   最后更新: 2017年4月9日 17:07   时间限制: 2000ms   内存限制: 512M 描述 交大上课需要打卡,于是在上课前的 ...

  7. 小魂和他的数列(dp+树状数组优化)

    链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...

  8. 牛客多校1 - Infinite Tree(虚树+换根dp+树状数组)

    题目链接:点击查看 题目大意:给出一个无穷个节点的树,对于每个大于 1 的点 i 来说,可以向点 i / minvid[ i ] 连边,这里的 mindiv[ x ] 表示的是 x 的最小质因数,现在 ...

  9. BZOJ.4553.[HEOI2016TJOI2016]序列(DP 树状数组套线段树/二维线段树(MLE) 动态开点)

    题目链接:BZOJ 洛谷 \(O(n^2)\)DP很好写,对于当前的i从之前满足条件的j中选一个最大值,\(dp[i]=d[j]+1\) for(int j=1; j<i; ++j)if(a[j ...

最新文章

  1. P4178 Tree (点分治)
  2. 覆盖索引与联合索引_什么是覆盖索引?
  3. Redis命令——Keys相关
  4. Android_Servlet验证的简单登录程序
  5. Apache Flink 零基础入门(八)Flink中指定算子的方式
  6. python数据类型怎么定义_零基础如何学好Python 之int 数字整型类型 定义int()范围大小转换...
  7. Linux学习之四——磁盘与文件系统管理
  8. C语言islower函数介绍、示例和实现
  9. 计算机专业基础融合,【计算机专业论文】计算机专业产教融合转型发展模式探析(共2546字)...
  10. 如何将Sublime Text中的代码以彩色高亮形式复制到博客或word文档里
  11. python编写ftp客户端_python实现ftp客户端示例分享
  12. python编程教学软件-编程教学平台的python编辑器的开发
  13. SWD离线烧写器(完全开源)
  14. 行列式的六条运算法则整理
  15. 关闭uTools鼠标中键响应
  16. 在VS2010下利用vue开发团队项目
  17. 一维卷积的意义和二维卷积(图像处理)的简单理解
  18. Ping通Tlenet不通,如何解决?
  19. 红米note5软件打开速度测试,差一点才完美!红米Note5深度评测(骁龙636性能测试)...
  20. Flutter开发之——网络请求-JsonToDart插件解析,AnyChat音视频互动开发平台

热门文章

  1. php框架快速入门,php-laravel4.0框架 简单快速入门
  2. egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?
  3. ccs加载out文件_类加载流程、类加载机制及自定义类加载器详解
  4. 达梦数据查询编码_查询数据库的编码方式
  5. linux 短信功能,Android调用系统短信功能发送短信
  6. php大马源码 手机网页,php大马源码:【百家号】脸书百科,分析 PHP大马-php_mof SHELL Web程序...
  7. 敲黑板!vue3重点!一文了解Composition API新特性:ref、toRef、toRefs
  8. [Swagger2]分组和接口注释及小结
  9. [蓝桥杯2018决赛]换零钞-枚举
  10. Redis高级数据结构原理解析-bitmap,hyperloglog