传送门

简单树状数组优化dp。

注意到k很小提示我们搜(d)(d)(d)索(p)(p)(p)。


先按第一维排序。

用f[i][j][0/1]f[i][j][0/1]f[i][j][0/1]表示第i个点结尾,有j段单调区间,最后一段单调递增/递减的方案数。

然后有f[i][j][0]=∑f[i′][j][0]+∑f[i′′][j−1][1]f[i][j][0]=\sum f[i'][j][0]+\sum f[i''][j-1][1]f[i][j][0]=∑f[i′][j][0]+∑f[i′′][j−1][1],其中yi′&lt;yi,yi′′&gt;yiy_{i'}&lt;y_i,y_{i''}&gt;y_iyi′​<yi​,yi′′​>yi​,f[i][j][1]f[i][j][1]f[i][j][1]的递推同理。

这个状态转移方程直接按y坐标建立树状数组优化就行了。

代码:

#include<bits/stdc++.h>
#define N 100005
#define ll long long
#define mod 100007
using namespace std;
inline ll read(){
	ll ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
int n,k,maxn;
ll f[N][11][2],bit[N][11][2];
struct node{int x,y;}p[N];
inline bool cmp(node a,node b){return a.x<b.x;}
inline int lowbit(int x){return x&-x;}
inline void update(int x,int k,int op,ll v){for(int i=x;i<=maxn;i+=lowbit(i))bit[i][k][op]+=v;}
inline ll query(int x,int k,int op){ll ret=0;for(int i=x;i;i-=lowbit(i))(ret+=bit[i][k][op])%=mod;return ret;}
inline int max(int a,int b){return a>b?a:b;}
int main(){
	n=read(),k=read();
	for(int i=1;i<=n;++i)p[i].x=read(),p[i].y=read(),maxn=max(maxn,p[i].y);
	sort(p+1,p+n+1,cmp);
	for(int i=1;i<=n;++i){
		update(p[i].y,0,0,f[i][0][0]=1),update(p[i].y,0,1,f[i][0][1]=1);
		for(int j=1;j<=k;++j){
			f[i][j][0]=(query(p[i].y-1,j,0)+query(p[i].y-1,j-1,1))%mod;
			f[i][j][1]=((query(maxn,j,1)-query(p[i].y,j,1)+query(maxn,j-1,0)-query(p[i].y,j-1,0))%mod+mod)%mod;
			update(p[i].y,j,0,f[i][j][0]),update(p[i].y,j,1,f[i][j][1]);
		}
	}
	ll ans=0;
	for(int i=1;i<=n;++i)(ans+=f[i][k][0]+f[i][k][1])%=mod;
	printf("%lld",ans);
	return 0;
}

2018.09.28 bzoj3688: 折线统计(dp+树状数组)的更多相关文章

  1. BZOJ3688 折线统计【树状数组优化DP】

    Description 二维平面上有n个点(xi, yi),现在这些点中取若干点构成一个集合S,对它们按照x坐标排序,顺次连接,将会构成一些连续上升.下降的折线,设其数量为f(S).如下图中,1-&g ...

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

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

  3. bzoj 1264 [AHOI2006]基因匹配Match(DP+树状数组)

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 793  Solved: 503[Submit][S ...

  4. 【bzoj2274】[Usaco2011 Feb]Generic Cow Protests dp+树状数组

    题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row andnumbered 1..N. The cows ...

  5. 奶牛抗议 DP 树状数组

    奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...

  6. 2018 CCPC网络赛 1010 hdu 6447 ( 树状数组优化dp)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 思路:很容易推得dp转移公式:dp[i][j] = max(dp[i][j-1],dp[i-1][j ...

  7. codeforces 597C C. Subsequences(dp+树状数组)

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. HDU 2227 Find the nondecreasing subsequences (DP+树状数组+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2227 Find the nondecreasing subsequences             ...

  9. ccpc_南阳 C The Battle of chibi dp + 树状数组

    题意:给你一个n个数的序列,要求从中找出含m个数的严格递增子序列,求能找出多少种不同的方案 dp[i][j]表示以第i个数结尾,形成的严格递增子序列长度为j的方案数 那么最终的答案应该就是sigma( ...

随机推荐

  1. docker 简单入门(一)

    本篇目录 写在最前面的话 docker概念介绍 镜像的概念.容器的概念 docker的安装介绍 写在最前面的话 大家好,首先跟大家说声对不起,我班门弄斧了,我本身是做系统开发,使用的语言是C#和JAV ...

  2. 21OGNL与ValueStack(VS)-静态方法访问

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在LoginAction中增加如下方法: public static Str ...

  3. J2SE 8的输入输出--序列化

    1. 普通序列化 implements Serializable 继承Serializable接口 class Employee implements Serializable { private S ...

  4. MySQL设置快速删除

    SET FOREIGN_KEY_CHECKS=0; DROP DATABASE ... SET FOREIGN_KEY_CHECKS=1;

  5. CDLinux制作成U盘启动

    由于CDLinux在虚拟机跑的时候无法识别集成的笔记本网卡,故在此进行一下相关步骤的整理. 工具: U盘 UNetbootin 步骤: 1.插入U盘到电脑.不一定要在操作之前进行格式化,我目前的U盘分 ...

  6. object-c语法

    Objective-C:C的超集 Objective-Objective-C是C语言的严格超集--任何C语言程序不经修改就可以直接通过Objective-C编译器,在Objective-C中使用C语言 ...

  7. js中定时器2

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. 实现spring IOC的常见二种方法 setter注入与构造器注入

    案例: beans.xml配置 <?xml version="1.0" encoding="UTF-8"?><beansxmlns=" ...

  9. hive 抽样方法

    select * from (select *from advert.dws_advert_order_model_sample_pcvr_v2_diwhere dt>= date_sub('$ ...

  10. Codeforces Beta Round#2

    Codeforces Beta Round#2 http://codeforces.com/contest/2 A 模拟题 #include<bits/stdc++.h> using na ...