当前位置: 首页 > 编程日记 > 正文

hdu-4302-Holedox Eating-线段树-单点更新,有策略的单点查询

一開始实在是不知道怎么做,后来经过指导,猛然发现,仅仅须要记录某个区间内是否有值就可以。

flag[i]:代表i区间内,共同拥有的蛋糕数量。

放置蛋糕的时候非常好操作,单点更新。

ip:老鼠当前的位置

寻找吃哪一个蛋糕的时候:

1,要寻找0-ip这个区间内,位置最大的一个蛋糕的位置,记为ll。

2,要寻找ip-n这个区间内,位置最小的一个蛋糕的位置,记为rr。

找到ll,rr之后,就能够依据ll,rr跟ip的关系来确定该吃ll还是rr了。

怎样寻找ll呢?

假设在某个区间的右半边区间找到了一个数,那么,这个区间的左半边区间肯定就不用寻找了。

假设这个区间的大小为1,那么这个区间内须要的数就肯定是这个数了。

假设某个区间的flag为0,那么这个区间肯定不存在蛋糕。

假设某个区间不包括0-ip,那么这个区间也肯定找不到ll。

于是,我们写出了寻找ll的函数:

int query(int ll,int rr,int l,int r,int rt)
{if(rr<l||ll>r)return -INF;if(flag[rt]==0)return -INF;if(l==r){if(flag[rt])return l;else return -INF;}int ans=-INF;ans=query(ll,rr,rson);if(ans==-INF)ans=query(ll,rr,lson);return ans;
}

寻找rr的原理与寻找ll的原理同样。

整体代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<stack>
using namespace std;
#define INF 99999999
#define lmin 0
#define rmax n
#define lson l,(l+r)/2,rt<<1
#define rson (l+r)/2+1,r,rt<<1|1
#define root lmin,rmax,1
#define maxn 110000
int flag[maxn*4];
void push_up(int rt)
{flag[rt]=flag[rt<<1]+flag[rt<<1|1];
}
void push_down(int rt)
{}
void creat(int l,int r,int rt)
{flag[rt]=0;if(l!=r){creat(lson);creat(rson);}
}
void update(int st,int x,int l,int r,int rt)
{if(r<st||l>st)return;if(l==r&&l==st){flag[rt]+=x;return;}update(st,x,lson);update(st,x,rson);push_up(rt);
}
int query(int ll,int rr,int l,int r,int rt)
{if(rr<l||ll>r)return -INF;if(flag[rt]==0)return -INF;if(l==r){if(flag[rt])return l;else return -INF;}int ans=-INF;ans=query(ll,rr,rson);if(ans==-INF)ans=query(ll,rr,lson);return ans;
}
int query1(int ll,int rr,int l,int r,int rt)
{// cout<<ll<<" "<<rr<<" "<<l<<" "<<r<<" "<<flag[rt]<<endl;if(rr<l||ll>r)return INF;if(flag[rt]==0)return INF;if(l==r){if(flag[rt])return l;else return INF;}int ans=INF;ans=query1(ll,rr,lson);if(ans==INF)ans=query1(ll,rr,rson);return ans;
}
int main()
{int cas,T;int n,m;int l,r,mid;int k,a,b,c;int m1,m2;scanf("%d",&T);cas=0;while(T--){cas++;int sum=0;scanf("%d%d",&n,&m);creat(root);int ip=0;int f=0;while(m--){scanf("%d",&k);if(k==1){int l=query(0,ip,root);int r=query1(ip,n,root);// cout<<l<<" "<<r<<endl;if(l>=0||r<=n){int ll=ip-l;int rr=r-ip;if(ll==rr&&f==1)mid=l;else if(ll==rr&&f==0)mid=r;else if(ll<rr){mid=l;f=1;}else if(ll>rr){mid=r;f=0;}int cha=mid-ip;if(cha<0)cha=-cha;sum+=cha;ip=mid;update(mid,-1,root);}}else{scanf("%d",&a);update(a,1,root);}}printf("Case %d: %d\n",cas,sum);}return 0;
}


转载于:https://www.cnblogs.com/mengfanrong/p/3867793.html

相关文章:

华南理工计算机基础知识题,华南理工_计算机应用基础_随堂练习答案(2017年)

华南理工_计算机应用基础_随堂练习答案(2017年) (18页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.9 积分&#xfeff;. . . .华南理工-计算机应用基础-随堂练习答案(2017年)第一章 计算机基础知…

python 添加进度条

安装&#xff1a; pip install tqdm使用&#xff1a; from tqdm import tqdm import time for i in tqdm(rang(10)):time.sleep(0.1)转载于:https://www.cnblogs.com/royfans/p/10271496.html

ceph osd 相关命令

混合osd的部署 先部署所有的ssd 在/etc/ceph.conf中最后添加ssd做osd的block大小如下&#xff1a; 比如部署中有两个ssd&#xff0c;则添加 [osd.0] bluestore_block_size xxxx [osd.1] bluestore_block_size xxx 如上的size大小计算如下&#xff0c;如ssd容量为800G&#x…

一万年太久,只争朝夕

好久没有写了&#xff0c;很多东西都已经忘记&#xff0c;不是因为别的&#xff0c;仅仅是觉得经历太多&#xff0c;没有地方装载那么多&#xff0c;想想以前的愿望&#xff0c;想过要当作家、想过要开个小店&#xff0c;但是看看现在&#xff0c;一切都变得遥不可及&#xff0…

上海职称英语和计算机考试时间,上海职称英语考试时间

上海2015年职称英语考试时间为12月25日到2015年1月15日&#xff0c;报名网站为&#xff1a;上海职业能力考试院。2015年如何短时间攻破职称英语考试关键点一&#xff1a;调整好备考心态&#xff0c;树立信心&#xff0c;切记懂乱、随便放弃总的来说&#xff0c;职称英语考生以中…

Caliburn.Micro 资源随时添加

Caliburn.Micro – Hello World http://buksbaum.us/2010/08/01/caliburn-micro-hello-world/ http://blog.csdn.net/xbgzs2010/article/details/18447625 转载于:https://www.cnblogs.com/ifendou/p/3870256.html

ros-kinetic install error: sudo rosdep init ImportError: No module named 'rosdep2'

refer to: https://blog.csdn.net/yueyueniaolzp/article/details/85070093 方法一 将Ubuntu默认python版本设置为2.7方法二 终端输入命令sudo apt-get install python3-rosdep转载于:https://www.cnblogs.com/xbit/p/10275218.html

Android:项目关联Library

为什么80%的码农都做不了架构师&#xff1f;>>> 近日&#xff0c;在做一个人人的第三方小项目。打算直接使用renren 的sdk 进行开发。因为renren的sdk是以android library project 形式发布的&#xff08;关于这种project的内容可以参考android library project&…

winxp运行html代码,关于WinXP系统实现自动化运行的操作技巧

关于WinXP系统实现自动化运行的操作技巧发布时间&#xff1a;2014-06-16 10:00:29 作者&#xff1a;佚名 我要评论与其他系统相比&#xff0c;WinXP系统的自动化运行已经大大改进&#xff0c;根据经验为大家总结了一份关于实现自动化运行的操作技巧&#xff0c;希望对大家…

ACM1881 01背包问题应用

01背包问题动态规划应用 acm1881毕业bg 将必须离开的时间限制看作背包容量&#xff0c;先将他们由小到大排序,然后在排完序的数组中对每个实例都从它的时间限制开始&#xff08;背包容量&#xff09;到它的延长时间进行遍历&#xff1b; 1 #include<iostream>2 #include&…

解决MVC返回Json中日期格式问题

问题&#xff1a;MVC中使用控制器返回JsonResult&#xff0c;如果带有日期字段的对象&#xff0c;浏览器接收到的json中会变成形如/Date(123123123)/格式。如何在easyui等中直接使用是个麻烦事。 解决方法&#xff1a;从源头开始。既然Controller控制器的Json()方法会自动转化&…

eclipse 出现user operation is waiting

project->properties->Builders 将带有 validator的选项全部去掉&#xff0c;然后保存一切就ok了。 转载于:https://www.cnblogs.com/fengnan/p/10276162.html

SHELL 技能树(持续更新)

相关xmind的原始文件已上传至mind-Mapping github,如有需要可自行下载&#xff0c;欢迎批评指正。 关于分布式存储的整体技能的学习历程 可以参考&#xff0c;分布式存储技能图谱

计算机网络 关于网速,关于电脑网速慢的说明

近期接到一些老师反馈&#xff0c;现在上网网速不如以前体验效果好。现就此反馈做一下说明&#xff0c;网速感觉慢是有多方面的原因的&#xff0c;和每个人的电脑环境有很大关系&#xff0c;比如有些终端上装有360、电脑管家之类的流氓程序的话&#xff0c;对终端的影响就很大&…

7月份没啥写的。。。

一整个月没啥写的&#xff0c;代表我啥也没学会啊。。。 没进步啊。。。 光听盗墓笔记的有声小说了。。。 我不对啊。。。我有罪。。。 我不好。。。我检讨。。。 赶紧听完&#xff0c;努力起来吧。。。 |||转载于:https://www.cnblogs.com/hydor/p/3873699.html

输入空格hdu - 1010 - Tempter of the Bone

时间紧张&#xff0c;先记一笔&#xff0c;后续优化与完善。 题意&#xff1a;一个N*M的地图&#xff0c;走过的点不能再走&#xff0c;X为墙弗成走&#xff0c;能否从点S到点D恰好用时T。&#xff08;1 < N, M < 7; 0 < T < 50&#xff09; 标题链接&#xff1a;h…

vue通信、传值

一、通过路由带参数进行传值 ①两个组件 A和B,A组件通过query把orderId传递给B组件&#xff08;触发事件可以是点击事件、钩子函数等&#xff09;this.$router.push({ path: /conponentsB, query: { orderId: 123 } }) // 跳转到B②在B组件中获取A组件传递过来的参数this.$rout…

C++ 技能树(持续更新)

相关xmind的原始文件已上传至mind-Mapping github,如有需要可自行下载&#xff0c;欢迎批评指正 关于分布式存储的整体技能的学习历程 可以参考分布式存储技能图谱&#xff0c;仅为个人的技能学习框架

(转)小小的研究了一下linux下的”注册表“ gconf-editor

最近学习linux&#xff0c;刚上手gedit&#xff0c;首先要解决的一定是编码的问题&#xff0c;总结一下方法&#xff0c;思路有下&#xff1a; 一.用图形化界面设置的方法 运行gconf-editor&#xff0c;在弹出的对话框中选择&#xff1a;/apps/gedit-2/preferences/encodings/a…

计算机技术在石油中的应用,计算机技术在石油工程中的应用.doc

1.1计算机技术在石油工程领域中的应用1.计算机模拟技术在钻探上的应用首先&#xff0c;石油钻井工程是一项高投入、高风险的地下隐蔽工程&#xff0c;其地下情况的模糊性和不确定性&#xff0c;给钻井作业带来了极大风险&#xff0c;影响着勘探效益。因此&#xff0c;准确地预测…

概率链接nbu 2416 奇怪的散步

题记&#xff1a;写这篇博客要主是加深自己对概率链接的认识和总结实现算法时的一些验经和训教&#xff0c;如果有错误请指出&#xff0c;万分感谢。 标题链接&#xff1a;http://acm.nbu.edu.cn/v1.0/Problems/Problem.php?pid2416 标题粗心&#xff1a; 有一个色子&#xff…

Spring AOP无法拦截内部方法调用-- expose-proxy=true用法

假设一个接口里面有两个方法&#xff1a; package demo.long;public interface CustomerService { public void doSomething1(); public void doSomething2(); } 接口实现类如下&#xff1a; package demo.long.impl;import demo.long.CustomerService; public class Custo…

HDD工作原理 导图

以上导图介绍了我们使用的 (HDD)机械硬盘的基本构造以及核心工作原理&#xff0c;对于大家扫盲有所帮助 参考文档&#xff1a; https://blog.csdn.net/yizhaoxin/article/details/53615740

计算机专业口号16字,计算机专业16口号

计算机专业&#xff0c;我们学校要弄运动会&#xff0c;求霸气口号计算机系齐心协力!! 力争上游!! 永不言弃!! 心系X班&#xff0c;合作无间&#xff0c;力斩群敌&#xff0c;舍我其谁 . 凌云赛场,斗志昂扬.文韬武略,笑傲群芳.利剑出鞘,倒海翻江 友谊第一、比赛第二 赛出风格、…

检测实现OpenCV2.4.4实现Shi-Tomasi角点检测(goodFeaturesToTrack)

最近研究检测实现&#xff0c;稍微总结一下&#xff0c;以后继续补充&#xff1a; #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> #include <stdlib.h>using…

autoLayout

第一次使用自动布局&#xff0c;记录下来,或许以后用第三方用不到这个&#xff0c;但是第一次接触VFL语言。 一个按钮&#xff0c;不论横竖屏&#xff0c;都要在屏幕底部。 UIView *bottomV [[UIView alloc]init]; bottomV.backgroundColor [UIColor whiteColor];[bottomV se…

复制图片的一部分

// 复制图片的一部分 procedure TForm1.Button1Click(Sender: TObject);var Bitmap: TBitmap; MyRect: TRect;begin MyRect : Rect(10,10,100,100);//定义复制范围 Bitmap : TBitmap.Create; //生成Bitmap对象 Bitmap.LoadFromFile(1.bmp); Form1.Canvas.BrushCopy(MyRec…

计算机rsnge指令,计算机二级office Excel 函数复习重点

原标题&#xff1a;计算机二级office Excel 函数复习重点计算机二级来袭&#xff01;近期&#xff0c;计算机二级考试即将开始&#xff0c;小编在这里为大家奉上众多难点中的一个考点的详解——《excel函数的应用》&#xff0c;希望能为您的考试锦上添花。常用的逻辑函数1、求和…