传送门

简单树状数组优化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. 用meta标签让双核浏览器用我们指定的内核渲染

    <html> <head> <meta name="renderer" content="webkit|ie-comp|ie-stand&q ...

  2. 在spring中实现quartz的动态调度(开始、暂停、停止等)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fantasic_van/article/details/74942062 需求: 需要在页面设定某个 ...

  3. UI5-文档-4.4-XML Views

    将所有UI放到index.html文件将很快导致一个混乱的设置,有相当多的工作在我们前面.我们先用sap.m.Text进行模块化.控件导入专用视图. SAPUI5支持多种视图类型(XML.HTML.J ...

  4. ios app 生命周期

    https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/The ...

  5. MySQL 查询时间差值大于某一个值的 记录

    "SELECT table_id, FROM table WHERE (timediff('%s',raise_time)<'00:05:00')" % \( table_i ...

  6. MySQL Installation of system tables failed!

    刚开始学习Linux,就遇到了问题. 当在RedHat下安装MySQL时提示如下错误,请高手给点指点,谢谢: rpm -vih  MySQL-server-community-5.0.96-1.rhe ...

  7. hive sql split 分隔符

    Hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...

  8. 关于关闭TAB,IFRAME占用的内存不能释放问题

    资料来源:http://jxd-zxf.iteye.com/blog/1440611 使用TAB时注意,如果TAB是引用IFRAME,关闭TAB时IFRAME不会被销毁从而导致内存不能释放,大量使用T ...

  9. Windows自带的端口转发工具netsh使用方法_DOS/BAT

    Windows自带的端口转发工具netsh使用方法_DOS/BAT   作者:用户 来源:互联网 时间:2017-02-22 17:24:30 netsh 端口转发 摘要: 下面的代码在windows ...

  10. with as (转)

    sql with as 用法(适用sqlserver,好像oracle也适用) Server 2005中提供了公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效 ...