BZOJ3825 : [Usaco2014 Nov]Marathon
不跳过任何点的路程=dis(l,l+1)+dis(l+1,l+2)+...+dis(r-2,r-1)+dis(r-1,r)
要跳过一个点i,则要最小化dis(i,i+2)-dis(i,i+1)-dis(i+1,i+2)
于是用线段树支持单点修改、区间查询和以及最小值即可
#include<cstdio>
#define N 100010
int n,m,i,j,loc[N][2],vs[N<<2],vm[N<<2];char op[5];
inline int abs(int x){return x>0?x:-x;}
inline int dis(int a,int b){return abs(loc[a][0]-loc[b][0])+abs(loc[a][1]-loc[b][1]);}
inline void min(int&a,int b){if(a>b)a=b;}
inline void cal(int x,int p){vs[x]=dis(p,p+1),vm[x]=dis(p,p+2)-dis(p,p+1)-dis(p+1,p+2);}
inline void up(int x){vs[x]=vs[x<<1]+vs[x<<1|1],vm[x]=vm[x<<1]<vm[x<<1|1]?vm[x<<1]:vm[x<<1|1];}
void build(int x,int a,int b){
if(a==b){cal(x,a);return;}
int mid=(a+b)>>1;
build(x<<1,a,mid),build(x<<1|1,mid+1,b),up(x);
}
void change(int x,int a,int b,int c){
if(a==b){cal(x,a);return;}
int mid=(a+b)>>1;
if(c<=mid)change(x<<1,a,mid,c);else change(x<<1|1,mid+1,b,c);
up(x);
}
int asks(int x,int a,int b,int c,int d){
if(c<=a&&b<=d)return vs[x];
int mid=(a+b)>>1,t=0;
if(c<=mid)t=asks(x<<1,a,mid,c,d);
if(d>mid)t+=asks(x<<1|1,mid+1,b,c,d);
return t;
}
int askm(int x,int a,int b,int c,int d){
if(c<=a&&b<=d)return vm[x];
int mid=(a+b)>>1,t=~0U>>1;
if(c<=mid)t=askm(x<<1,a,mid,c,d);
if(d>mid)min(t,askm(x<<1|1,mid+1,b,c,d));
return t;
}
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%d%d",&loc[i][0],&loc[i][1]);
build(1,1,n);
while(m--){
scanf("%s%d",op,&i);
if(op[0]=='U'){
scanf("%d%d",&loc[i][0],&loc[i][1]);
change(1,1,n,i);
if(i>1)change(1,1,n,i-1);
if(i>2)change(1,1,n,i-2);
}else{
scanf("%d",&j);
if(i==j)puts("0");
else if(i+1==j)printf("%d\n",dis(i,j));
else printf("%d\n",asks(1,1,n,i,j-1)+askm(1,1,n,i,j-2));
}
}
return 0;
}
BZOJ3825 : [Usaco2014 Nov]Marathon的更多相关文章
- 3892: [Usaco2014 Dec]Marathon
3892: [Usaco2014 Dec]Marathon Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 169 Solved: 100[Submi ...
- bzoj3892[Usaco2014 Dec]Marathon*
bzoj3892[Usaco2014 Dec]Marathon 题意: 在二维平面上有N个点,从(x1,y1)到(x2,y2)的代价为|x1-x2|+|y1-y2|.求从1号点出发,按从1到N的顺序依 ...
- BZOJ-USACO被虐记
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- USACO翻译:USACO 2013 NOV Silver三题
USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
- poj1985 Cow Marathon (求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3195 Accepted: 1596 Case ...
- POJ1985Cow Marathon[树的直径]
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5117 Accepted: 2492 Case ...
随机推荐
- JQuery入门
JQuery入门 1 jQuery的概述 1.1 jQuery简介 jQuery是一个 JavaScript函数库,它是一个“写的更少,但做的更多”的轻量级 JavaScript 库.jQuery 极 ...
- map遍历
Set<Map.Entry<String,String>> ss = params.entrySet(); for(Map.Entry<String,String> ...
- 【云计算】Netflix 开源持续交付平台 Spinnaker
oschina 发布于: 2015年11月19日 (0评) 分享到: 收藏 +1 CDS首都在线全球云主机.全球私有网络,开工送礼,免费试用! » 日前,Ne ...
- iterator与const_iterator及const iterator区别
如果你传递过来一个const类型的容器,那么只能用const_iterator来遍历. C++ Code 12345 void Method(const vector<int> v ...
- 18.用两个栈实现队列[2StacksToImplementQueue]
[题目] 某队列的声明如下: C++ Code 123456789101112131415 template<typename T> class CQueue { public: ...
- iOS7 和 iOS6的页面兼容问题
ios7 的status bar变透明了,各个bar也透明了,一个controller的view占据了整个屏幕.怎么调整呢?基本的思想是把内容的坐标下移.如果仅仅把内容的y坐标下移,那么在ios6上显 ...
- JavaScript设计模式 - 迭代器模式
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺 ...
- ORACLE清除某一字段重复的数据(选取重复数据中另一个字段时期最大值)
需求:资产维修表中同一资产可能维修完继续申请维修,这时候维修状态需要根据最近的维修时间去判断维修状态,所以同一资产ID下会出现重复的数据(维修审批通过,维修审批未通过),或者可能不出现(未申请维修), ...
- 【python】pathlib库
pathlib在python3.2以上开始默认支持,在python2.7中如果要使用需要安装 pip install pathlib pathlib更多参考资料:http://pathlib.read ...
- ACdream 1188 Read Phone Number (字符串大模拟)
Read Phone Number Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Sub ...