不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归?

本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不成了。

不过至少还是有收获的,虽然现在越来越觉得我做题的时间难以估摸了。

本来纯粹是以复习线段树(喂喂你本来就没码过几遍!)的心态来做这道题的,现在发现(1)我的基础好糟糕(2)这题其实不简单!

至今觉得我不用build_tree,直接维护树导致过程的参变很多这事儿有点麻烦,写个过程要传这么多变量,但是我又懒得去build_tree…

他们说这是区间DP,不管了反正我概念模糊的很凭感觉去做了,给我的感觉倒是和之前的树状DP有点像?选课那道题?(话说多叉转二叉还是挺有用的貌似~~)

updata子过程参考了vijos上的很多题解,话说这年头大神都用C++了,Pascal的解题也很少啊QAQ…最神的就是updata子过程,不得不佩服,把记录类型做参数传进去是平时很少用到的,但在这题中起到了很大的作用啊!

t[x]的字段sum表示总和,max表示这一段的最大区间,maxr表示带上右端点的max,maxl表示带上左端点的max。

鉴于这道题看了很多题解才做出来,有必要时不时拿出来温习,希望考试如果用到不要忘记了。

program vijos_p1083;
type keytype=record
sum,max,maxl,maxr:longint;
end;
var t:array[..] of keytype;
m,n,k,a,b,i:longint; procedure swap(var a,b:longint);
var t:longint;
begin
t:=a;a:=b;b:=t;
end; function maxx(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; procedure updata(var a:keytype;b,c:keytype); //神一般存在的过程
begin
a.sum:=b.sum+c.sum;
a.maxl:=maxx(b.maxl,b.sum+c.maxl);
a.maxr:=maxx(c.maxr,c.sum+b.maxr);
a.max:=maxx(b.max,c.max);
a.max:=maxx(a.max,b.maxr+c.maxl);
end; procedure change(now,left,right,loc,delta:longint);
var mid:longint;
begin
if (left=right) then
begin
t[now].sum:=delta;
t[now].maxl:=delta;
t[now].maxr:=delta;
t[now].max:=delta;
end
else
begin
mid:=(left+right) div ;
if loc>mid then change(now*+,mid+,right,loc,delta) else change(now*,left,mid,loc,delta);
updata(t[now],t[now*],t[now*+]);
end;
end; function work(now,left,right,a,b:longint):keytype;
var mid:longint;
begin
mid:=(left+right) div ;
if (a=left) and (b=right) then exit(t[now]); //此处的判断条件一开始写成了left=right,导致程序长跪不起一分钟也不出结果
if a>mid then exit(work(now*+,mid+,right,a,b));
if b<mid+ then exit(work(now*,left,mid,a,b));
updata(work,work(now*,left,mid,a,mid),work(now*+,mid+,right,mid+,b));
end; begin
readln(n,m);
for i:= to n do
begin
read(k);
change(,,n,i,k);
end;
for i:= to m do
begin
readln(k,a,b);
if (k=) and (a>b) then swap(a,b);
if k= then change(,,n,a,b) else writeln(work(,,n,a,b).max);
end;
end.

小白逛公园

P.S. 不知道为什么运行速度有点慢,我的in9在自己电脑上运行要4s左右,测评机上则是1.6s左右,难道该换电脑了?!

测试数据 #0: Accepted, time = 0 ms, mem = 32048 KiB, score = 10

测试数据 #1: Accepted, time = 15 ms, mem = 32044 KiB, score = 10

测试数据 #2: Accepted, time = 140 ms, mem = 32048 KiB, score = 10

测试数据 #3: Accepted, time = 93 ms, mem = 32044 KiB, score = 10

测试数据 #4: Accepted, time = 578 ms, mem = 32048 KiB, score = 10

测试数据 #5: Accepted, time = 1375 ms, mem = 32048 KiB, score = 10

测试数据 #6: Accepted, time = 1546 ms, mem = 32048 KiB, score = 10

测试数据 #7: Accepted, time = 1546 ms, mem = 32052 KiB, score = 10

测试数据 #8: Accepted, time = 1656 ms, mem = 32052 KiB, score = 10

测试数据 #9: Accepted, time = 1687 ms, mem = 32048 KiB, score = 10

Accepted, time = 8636 ms, mem = 32052 KiB, score = 100

[vijos P1083] 小白逛公园的更多相关文章

  1. Vijos 1083 小白逛公园(线段树)

    线段树,每个结点维护区间内的最大值M,和sum,最大前缀和lm,最大后缀和rm. 若要求区间为[a,b],则答案max(此区间M,左儿子M,右儿子M,左儿子rm+右儿子lm). ----------- ...

  2. [vijos]1083小白逛公园<线段树>

    描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根据公园的风景给每个公 ...

  3. 【vijos】P1083 小白逛公园

    [算法]线段树 [题解] 学自:https://vijos.org/p/1083/solution(wang_yanheng的回答) 回溯时维护一段区间的以下域: sumL:从左端点起连续区间的最大和 ...

  4. Bzoj 1756: Vijos1083 小白逛公园 线段树

    1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1021  Solved: 326[Submit][Statu ...

  5. BZOJ 1756: Vijos1083 小白逛公园

    题目 1756: Vijos1083 小白逛公园 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 856  Solved: 264[Submit][Sta ...

  6. JDOJ-P1260 VIJOS-P1083 小白逛公园

    首先,在这里给大家推荐一个网站,https://neooj.com:8082,这是我母校的网站 言归正传,题目描述 VIJOS-P1083 小白逛公园 Time Limit: 1 Sec  Memor ...

  7. 线段树 || BZOJ1756: Vijos1083 小白逛公园 || P4513 小白逛公园

    题面:小白逛公园 题解: 对于线段树的每个节点除了普通线段树该维护的东西以外,额外维护lsum(与左端点相连的最大连续区间和).rsum(同理)和sum……就行了 代码: #include<cs ...

  8. 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间合并(单点更新、区间查询)

    P4513 小白逛公园 题目背景 小新经常陪小白去公园玩,也就是所谓的遛狗啦… 题目描述 在小新家附近有一条“公园路”,路的一边从南到北依次排着nn个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩 ...

  9. vijos1083:小白逛公园

    小白逛公园 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦…在小新家附近有一条“公园路”,路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根据公园的 ...

随机推荐

  1. [4] 智能指针boost::scoped_ptr

    [1]boost::scoped_ptr简介 boost::scoped_ptr属于boost库,定义在namespace boost中,包含头文件#include <boost/scoped_ ...

  2. iOS使用textfield注意的细节

    一般做登录界面或者要填写表之类的页面会经常使用到textfield.使用很简单,但是其实他有很多小的处理细节,这回让你显得有经验,交互性很好.在这里呢,我就直接拿stroyboard中的截图来说. c ...

  3. win7 64+python2.7.12安装numpy+scipy+matplotlib+scikit-learn

    python包下载网址 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 1.已经安装python2.7.12,查看scripts里是否有pip.2.7.9版本以上 ...

  4. python :页面布局 ,后台管理页面之左侧菜单跟着滚动条动

    左侧菜单跟着滚动条动 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:// ...

  5. [课程设计]Scrum 1.4 多鱼点餐系统开发进度(点餐页面框架布置)

    Scrum 1.4 多鱼点餐系统开发进度 (点餐页面框架布置) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系 ...

  6. 模块(序列化(json&pickle)+XML+requests)

    一.序列化模块 Python中用于序列化的两个模块: json     跨平台跨语言的数据传输格式,用于[字符串]和 [python基本数据类型] 间进行转换 pickle   python内置的数据 ...

  7. 指定页面配置https(apache/tomcat)

    apache/tomcat服务器下配置https         apache下配置https:             首先在网站根目录下,找到.htaccess文件(如果没有则新建),apache ...

  8. JAVA基础知识之网络编程——-网络通信模型(IO模型)

    <Unix网络编程:卷1>中介绍了5中I/O模型,JAVA作为运行在宿主机上的程序,底层也遵循这5中I/O模型规则.这5中I/O模型分别是: 阻塞式IO 非阻塞式IO I/O复用 信号驱动 ...

  9. 如何使用Python调用AutoIt来实现Flash控件的上传功能

    先看一段代码 upload.au3(这个后缀autoit3的格式): ;等待出现title为数据采集-军课网-MozillaFirefox的浏览器窗口 WinWait("数据采集 - XX网 ...

  10. 【前端】互联网公司2014前端笔试面试题JavaScript篇(待续)

    // 网上找的题目,自己做了下 /**************************** *1. 用js实现随机选取10–100之间的10个数字,存入一个数组,并排序 *************** ...