如此之裸…

Code:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 200000 + 3;
int x[maxn], y[maxn], n, m, len;
long long nex[maxn], nexx[maxn], maxv[maxn << 2], C[maxn];
inline long long dist(int i,int j){ return abs(x[i] - x[j]) + abs(y[i] - y[j]); }
void build(int l,int r , int o)
{
if(l > r) return ;
if(l == r)
{
maxv[o] = nexx[l];
return;
}
int mid = (l + r) >> 1, ls = (o << 1), rs = (o << 1)|1;
build(l, mid , ls);
build(mid + 1, r, rs);
maxv[o] = max(maxv[ls], maxv[rs]);
}
inline long long query(int l,int r,int L,int R,int o)
{
if(l > r || r < L || l > R) return 0;
if(l >= L && r <= R)
{
return maxv[o];
}
int mid = (l + r) >> 1, ls = (o << 1), rs = (o << 1) | 1;
long long ans = 0;
ans = max(ans, query(l, mid,L,R,ls));
ans = max(ans, query(mid + 1, r, L,R,rs));
return ans;
}
void change(int l,int r,int pos,int o)
{
if(l > r || r < pos || l > pos) return ;
if(l == r)
{
maxv[o] = nexx[pos];
return ;
}
int mid = (l + r) >> 1, ls = (o<<1), rs = (o << 1) |1;
change(l,mid,pos,ls);
change(mid + 1,r,pos,rs);
maxv[o] = max(maxv[ls], maxv[rs]);
}
int lowbit(int t){ return t & (-t); }
inline void update(int x,long long delta)
{
while(x <= n)
{
C[x] += delta;
x += lowbit(x);
}
}
inline long long ask(int x)
{
long long sums = 0;
while(x > 0)
{
sums += C[x];
x -= lowbit(x);
}
return sums;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i = 1;i <= n; ++i) scanf("%d%d",&x[i],&y[i]);
for(int i = 1;i <= n; ++i) { if(i < n)nex[i] = dist(i, i + 1); update(i, dist(i,i - 1));}
for(int i = 1;i <= n - 2; ++i) nexx[i] = nex[i] + nex[i + 1] - dist(i, i + 2);
len = n - 2;
build(1, len, 1);
for(int i = 1;i <= m; ++i)
{
char op[10];
scanf("%s",op);
if(op[0] == 'Q')
{
int st, ed;
scanf("%d%d",&st,&ed);
long long s_ed = ask(ed);
long long s_st = ask(st);
printf("%lld\n",s_ed - s_st - query(1,len,st,ed - 2,1));
}
else
{
int id, a,b;
scanf("%d%d%d",&id,&a,&b);
update(id, -dist(id - 1, id));
update(id + 1, -dist(id, id + 1));
x[id] = a, y[id] = b;
nex[id - 1] = dist(id - 1, id);
nex[id] = dist(id, id + 1);
if(id + 2 <= n)
{
nexx[id] = nex[id] + nex[id + 1] - dist(id, id + 2);
change(1,len, id, 1);
}
if(id - 1 > 0 )
{
nexx[id - 1] = nex[id - 1] + nex[id] - dist(id - 1, id + 1);
change(1,len,id - 1,1);
}
if(id - 2 >= 1)
{
nexx[id -2] = nex[id - 2] + nex[id - 1] - dist(id - 2, id);
change(1,len,id - 2,1);
}
update(id, dist(id - 1, id));
update(id + 1, dist(id, id + 1));
}
}
return 0;
}

洛谷P3113 [USACO14DEC]马拉松赛跑Marathon_Gold 线段树维护区间最大值 模板的更多相关文章

  1. 洛谷P4243/bzoj1558 [JSOI2009]等差数列(线段树维护差分+爆炸恶心的合并)

    题面 首先感谢这篇题解,是思路来源 看到等差数列,就会想到差分,又有区间加,很容易想到线段树维护差分.再注意点细节,\(A\)操作完美解决 然后就是爆炸恶心的\(B\)操作,之前看一堆题解的解释都不怎 ...

  2. 洛谷 P4198 楼房重建 线段树维护单调栈

    P4198 楼房重建 题目链接 https://www.luogu.org/problemnew/show/P4198 题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上 ...

  3. 51nod 1376【线段树维护区间最大值】

    引自:wonter巨巨的博客 定义 dp[i] := 以数字 i(不是下标 i)为结尾的最长上升长度 然后用线段树维护 dp[i]: 每个节点维护 2 个信息,一个是当前区间的最大上升长度,一个是最大 ...

  4. HDU 2795 Billboard 【线段树维护区间最大值&&查询变形】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others) ...

  5. hdu1754线段树维护区间最大值

    #include <iostream> #include <cstdio> using namespace std; #define MAXN 200005 int N,M; ...

  6. 【HDOJ 1337】I Hate It(线段树维护区间最大值)

    Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写 ...

  7. 洛谷P3928 Sequence2(dp,线段树)

    题目链接: 洛谷 题目大意在描述底下有.此处不赘述. 明显是个类似于LIS的dp. 令 $dp[i][j]$ 表示: $j=1$ 时表示已经处理了 $i$ 个数,上一个选的数来自序列 $A[0]$ 的 ...

  8. 洛谷P2894[USACO08FEB]酒店Hotel(线段树)

    问题描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...

  9. 洛谷P2574 XOR的艺术(线段树)——Chemist

    当线段树遇上无敌位运算! 还是老套路,线段树维护区间和,一个区间有几个"1"就是这个区间的区间和,同时支持区间修改区间查询,只不过操作从加法变成了异或.主要难点就在更新懒标记那里, ...

随机推荐

  1. (10)Spring Boot修改端口号【从零开始学Spring Boot】

    Spring boot 默认端口是8080,如果想要进行更改的话,只需要修改applicatoin.properties文件,在配置文件中加入: server.port=9090 常用配置: #### ...

  2. Spring Cloud-config(十一)

    说明 用于分布式中统一的配置管理,是一个单独的微服务 简单例子 准备git 1.我自己在本地环境搭建了git服务器 也可以使用github 可参考:https://www.cnblogs.com/LQ ...

  3. mysql use index () 优化查询的例子

    USE INDEX在你查询语句中表名的后面,添加 USE INDEX 来提供你希望 MySQ 去参考的索引列表,就可以让 MySQL 不再考虑其他可用的索引.Eg:SELECT * FROM myta ...

  4. 华为USG6550 MIB CPU MEM

    https://www.cnblogs.com/vincent-liang/p/7785089.html

  5. RestTemplate使用详解

    1.RestTemplate添加RequestHeader如content-type可通过httpclient设置 List<Header> headers = new ArrayList ...

  6. POJ 3537

    利用后继节点的SG值求出当前的SG值. 在当前任意一个BLANK插入一个x后,分成两段,于是,看成两段的NIM,异或和,按SG的定义求出当前的SG值即可. #include <iostream& ...

  7. C++开发人脸性别识别教程(9)——搭建MFC框架之显示图片

    在之前的博客中我们已经实现读取用户选定的目录.并将其路径保存在对应的变量中.在这篇博文中我们将介绍怎样借助CvvImage类将图片显示在picture控件中,并自己主动读取目录下的其它图片. 一.加入 ...

  8. impdp时卡住,DW等待library cache lock

    同事反映impdp时在SCHEMA_REPORT/TYPE/TYPE_SPEC步骤卡住,1个多小时后也没有响应, 查下v$session: select program,sid, event,bloc ...

  9. 初探boost之noncopyable学习笔记

    noncopyable 功能 同意程序轻松实现一个不可复制的类. 需包括头文件 #include<boost/noncopyable.hpp>     或 #include<boos ...

  10. 三星抛出万亿投资计划 布局四大科技创新领域(5G、人工智能、汽车半导体、生物技术四大新兴产业)

    三星近日抛出震惊世人的投资计划,未来三年将在全球范围新增投资180万亿韩元(约1万亿元人民币).新增员工4万名.这是韩国单一企业集团大规模的投资计划. 笔者获悉,三星万亿投资计划主要分两大部分,一是在 ...