题意:

就像人类喜欢跳格子游戏一样,FJ的奶牛们发明了一种新的跳格子游戏。虽然这种接近一吨的笨拙的动物玩跳格子游戏几乎总是不愉快地结束,但是这并没有阻止奶牛们在每天下午参加跳格子游戏 
游戏在一个R*C的网格上进行,每个格子有一个取值在1-k之间的整数标号,奶牛开始在左上角的格子,目的是通过若干次跳跃后到达右下角的格子,当且仅当格子A和格子B满足如下条件时能从格子A跳到格子B: 
1.B格子在A格子的严格右方(B的列号严格大于A的列号) 
2.B格子在A格子的严格下方(B的行号严格大于A的行号) 
3.B格子的标号和A格子的标号不同 
请你帮助奶牛计算出从左上角的格子到右下角的格子一共有多少种不同的方案
n,m<=750,k<=n*m
 
思路:这题是金组的数据范围
在铜组因为数据小 裸的dp可做 金组需要优化
 \[ dp[i,j]= \sum_{x=1}^{i-1}  \sum_{y=1}^{j-1}  dp[x,y]         (a[i,j]<>a[x,y]) \] 
转化为左上角的所有方案-该颜色的所有方案
因为只要求保存一个版本
可以用一棵动态开点的线段树解决
修改时使用类似于主席树的方法
 const mo=;
var t:array[..]of record
l,r,s:longint;
end; sum,a,dp:array[..,..]of longint;
root:array[..]of longint;
f:array[..]of longint;
n,m,i,j,s1,s2,cnt,k:longint; procedure pushup(x:longint);
var l,r:longint;
begin
l:=t[x].l; r:=t[x].r;
t[x].s:=(t[l].s+t[r].s) mod mo;
end; procedure update(var p:longint;l,r,x,v:longint);
var mid:longint;
begin
if p= then
begin
inc(cnt); p:=cnt;
end;
if l=r then
begin
t[p].s:=(t[p].s+v) mod mo; exit;
end;
mid:=(l+r)>>;
if x<=mid then update(t[p].l,l,mid,x,v)
else update(t[p].r,mid+,r,x,v);
pushup(p);
end; function query(p,l,r,x,y:longint):longint;
var mid:longint;
begin if (p=)or(x>y) then exit();
if (x<=l)and(y>=r) then exit(t[p].s);
mid:=(l+r)>>;
query:=;
if x<=mid then query:=(query+query(t[p].l,l,mid,x,y)) mod mo;
if y>mid then query:=(query+query(t[p].r,mid+,r,x,y)) mod mo;
end; begin
// assign(input,'bzoj3939.in'); reset(input);
// assign(output,'bzoj3939.out'); rewrite(output);
readln(n,m,k);
for i:= to n do
for j:= to m do read(a[i,j]); dp[,]:=;
for i:= to m do sum[,i]:=;
update(root[a[,]],,m,,); for i:= to n do
begin
for j:=m downto do
begin
s1:=sum[i-,j-];
s2:=query(root[a[i,j]],,m,,j-);
dp[i,j]:=((s1-s2) mod mo+mo) mod mo;
update(root[a[i,j]],,m,j,dp[i,j]);
end;
for j:= to m do
begin
f[j]:=(f[j-]+dp[i,j]) mod mo;
sum[i,j]:=(sum[i-,j]+f[j]) mod mo;
end;
end;
writeln(dp[n,m]);
{for i:=1 to n do
begin
for j:=1 to m do write(dp[i,j],' ');
writeln;
end; } close(input);
close(output);
end.
 

【BZOJ3939】Cow Hopscotch(动态开点线段树)的更多相关文章

  1. 【bzoj3939】[Usaco2015 Feb]Cow Hopscotch 动态开点线段树优化dp

    题目描述 Just like humans enjoy playing the game of Hopscotch, Farmer John's cows have invented a varian ...

  2. [2016湖南长沙培训Day4][前鬼后鬼的守护 chen] (动态开点线段树+中位数 or 动规 or 贪心+堆优化)

    题目大意 给定一个长度为n的正整数序列,令修改一个数的代价为修改前后两个数的绝对值之差,求用最小代价将序列转换为不减序列. 其中,n满足小于500000,序列中的正整数小于10^9 题解(引自mzx神 ...

  3. [bzoj 3531][SDOI2014]旅行(树链剖分+动态开点线段树)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3531 分析: 对于每个颜色(颜色<=10^5)都建立一颗线段树 什么!那么不是M ...

  4. 【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化

    4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 247  Solved: 113[Submit][Status][Discuss ...

  5. codeforces 893F - Physical Education Lessons 动态开点线段树合并

    https://codeforces.com/contest/893/problem/F 题意: 给一个有根树, 多次查询,每次查询对于$x$i点的子树中,距离$x$小于等于$k$的所有点中权值最小的 ...

  6. codeforces 915E - Physical Education Lessons 动态开点线段树

    题意: 最大$10^9$的区间, $3*10^5$次区间修改,每次操作后求整个区间的和 题解: 裸的动态开点线段树,计算清楚数据范围是关键... 经过尝试 $2*10^7$会$MLE$ $10^7$会 ...

  7. CF915E Physical Education Lessons 动态开点线段树

    题目链接 CF915E Physical Education Lessons 题解 动态开点线段树 代码 /* 动态开点线段树 */ #include<cstdio> #include&l ...

  8. 洛谷P3313 [SDOI2014]旅行(树链剖分 动态开节点线段树)

    题意 题目链接 Sol 树链剖分板子 + 动态开节点线段树板子 #include<bits/stdc++.h> #define Pair pair<int, int> #def ...

  9. NOIP2017 列队——动态开点线段树

    Description: Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×m名学生,方阵的行数为  ...

  10. 洛谷P3120 [USACO15FEB]牛跳房子(动态开节点线段树)

    题意 题目链接 Sol \(f[i][j]\)表示前\(i\)行\(j\)列的贡献,转移的时候枚举从哪里转移而来,复杂度\(O(n^4)\) 然后考虑每一行的贡献,动态开节点线段树维护一下每种颜色的答 ...

随机推荐

  1. Lambda表达式。

    函数式编程思想: 面向对象思想:做一件事,先找能解决这件事的对象,然后调用该对象相应方法. 面向过程思想:只要能获取到结果,怎么做的不重要,重视结果,不重视过程. 冗余的代码: public stat ...

  2. js中不容小觑的var声明

    在学习vue相关课程中,有一次跟着老师敲代码,写出了如下代码: var Child = { template:`<div @click='handleClick'><slot> ...

  3. php 生成饼状图,折线图,条形图 通用类 2

    生成饼状图,折线图,条形图通用的php类,这里使用的是国外的 HighCharts,前台页面别忘了调用HighCahrt  js HighCharts中文网站  http://www.hcharts. ...

  4. hdu 2192 MagicBuilding

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  5. Docker Hello World容器运行报错的解决办法

    费了好大力气从Docker官网下载了Docker Community Editor的安装镜像,Docker.dmg, 总共将近500MB,双击进行安装: 命令行里使用docker version查看版 ...

  6. ref版的 摄像头 读取 因为id的时候,id不能重复 还要用时间戳,比较麻烦

    <!-- * @description 摄像头vue版实例 * @fileName cameraObject.vue * @author 彭成刚 * @date // :: * @version ...

  7. Android N requires the IDE to be running with Java 1.8 or later

      Android Studio需要两个JDK: ide jdk和project jdk: 前者是IDE本身运行使用的JDK. 后者用于编译Java代码 Project JDK 可以通过file-&g ...

  8. packet capture

    1.下载地址:https://www.coolapk.com/apk/app.greyshirts.sslcapture

  9. C指针复制字符串从一个数组到另一个数组

    #include <stdio.h> void  copyString (char  *to, char  *from) {      while ( *from ) // from指针遇 ...

  10. layui使用小记(持续更新)

    关于Select等Form表单元素,在使用的时候部分特性会失效 如select自带的Search功能: 其实在使用Form表单元素的时候,你如果需要layui自带的一些功能(搜索,验证等),请用< ...