不跳过任何点的路程=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的更多相关文章

  1. 3892: [Usaco2014 Dec]Marathon

    3892: [Usaco2014 Dec]Marathon Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 169  Solved: 100[Submi ...

  2. bzoj3892[Usaco2014 Dec]Marathon*

    bzoj3892[Usaco2014 Dec]Marathon 题意: 在二维平面上有N个点,从(x1,y1)到(x2,y2)的代价为|x1-x2|+|y1-y2|.求从1号点出发,按从1到N的顺序依 ...

  3. BZOJ-USACO被虐记

    bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  5. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  6. USACO翻译:USACO 2013 NOV Silver三题

    USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...

  7. 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP

    [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...

  8. poj1985 Cow Marathon (求树的直径)

    Cow Marathon Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 3195   Accepted: 1596 Case ...

  9. POJ1985Cow Marathon[树的直径]

    Cow Marathon Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 5117   Accepted: 2492 Case ...

随机推荐

  1. apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))

    apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))   今天用apache 自带的ab工具测试,当并发量达到1000多的时 ...

  2. 什么是mixin

    转自:http://guangboo.org/2013/01/28/python-mixin-programming http://en.wikipedia.org/wiki/Mixin http:/ ...

  3. 【转】Eclipse中查看jar包中的源码

    (简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...

  4. 【转】Mybatis/Ibatis,数据库操作的返回值

    该问题,我百度了下,根本没发现什么有价值的文章:还是看源代码(详见最后附录)中的注释,最有效了!insert,返回值是:新插入行的主键(primary key):需要包含<selectKey&g ...

  5. jquery记住密码,记住账号,自动登录

    1.引入jquery库 2.引入jquery.cookie.js库 3.引入操作js jsp如下: $(document).ready(function() { //输入框获得焦点-失去焦点 $(&q ...

  6. [Android Pro] Android fastboot刷机和获取Root权限

    参考文章: https://developers.google.com/android/nexus/images 转载自:    http://www.inexus.co/article-1280-1 ...

  7. Java 全半角转换

    * 全角转半角的 转换函数* @return String*/public static final String full2HalfChange(String QJstr){StringBuffer ...

  8. JQuery的ajax登录案例

    1.简单版AjaxLogin.html代码: <head> <title></title> <script src="jquery-1.8.3.js ...

  9. ***linux下用cron定时执行任务的方法

    名称 : crontab  使用权限 : 所有使用者 使用方式 : crontab file [-u user]-用指定的文件替代目前的crontab. crontab-[-u user]-用标准输入 ...

  10. duilib WindowImplBase BUG修复 --- 按一次ESC键, 关闭多个窗口

    BUG造成的影响 继承自WindowImplBase的窗口类, 如果没有重写重写ResponseDefaultKeyEvent而由WindowImplBase默认处理的话, 会导致按一次有ESC键, ...