2017.5.11 道路修建 思考记录
这个线段树一眼秒了(主要是有前面的思考经验)
就是维护两个列对应线段上的形态。,比较好想的
但数据结构题有个特点——使你知道结构也不会做————会做也会很大概率爆零....
所以数据结构题必须 小数据+特殊数据 + 对拍!!!!不然怎么挂的都不知道、
敲+错+调+查+调 搞了一个上午
这个题用线段树维护 一个最小值 合并时需要考虑 不同形态 子图(其实是树)的合并方法
但其实只和两个端点有关:
看着丧心病狂的up就知道有多难调了(关键当时还不知道对不对,写完需要胆量)
码:
#include<iostream>
#include<cstdio>
using namespace std;
#define zuo l,mid,o<<1
#define you mid+1,r,o<<1|1
#define N 60006
int IO[N<<2],II[N<<2],lu[4][N],x,xx,y,yy,z,n,m,i,a,b,ans,cha,OI[N<<2],OO[N<<2],deng[N<<2],linOO,linOI,linIO,linII,lindeng,llinIO,llinOI,llinII,llinOO,llindeng;
bool yici;
char op;
void up(int o,int mid)
{IO[o]=II[o<<1]+lu[1][mid]+lu[2][mid]+OO[o<<1|1]; //II+OOIO[o]=min(IO[o],II[o<<1]+min(lu[1][mid],lu[2][mid])+IO[o<<1|1]); //II+IOIO[o]=min(IO[o],II[o<<1]+min(lu[1][mid],lu[2][mid])+deng[o<<1|1]); //II+=IO[o]=min(IO[o],IO[o<<1]+lu[1][mid]+lu[2][mid]+deng[o<<1|1]); //IO+=IO[o]=min(IO[o],IO[o<<1]+IO[o<<1|1]+lu[1][mid]+lu[2][mid]); //IO+IOIO[o]=min(IO[o],deng[o<<1]+lu[1][mid]+lu[2][mid]+IO[o<<1|1]); //=+IOOI[o]=OI[o<<1]+lu[1][mid]+lu[2][mid]+deng[o<<1|1]; //OI+=OI[o]=min(OI[o],OI[o<<1]+lu[1][mid]+lu[2][mid]+OI[o<<1|1]); //OI+OIOI[o]=min(OI[o],OI[o<<1]+min(lu[1][mid],lu[2][mid])+II[o<<1|1]); //OI+IIOI[o]=min(OI[o],OO[o<<1]+II[o<<1|1]+lu[1][mid]+lu[2][mid]); //OO+IIOI[o]=min(OI[o],deng[o<<1]+lu[1][mid]+lu[2][mid]+OI[o<<1|1]); //=+OIOI[o]=min(OI[o],deng[o<<1]+min(lu[1][mid],lu[2][mid])+II[o<<1|1]); //=+IIII[o]=IO[o<<1]+II[o<<1|1]+lu[1][mid]+lu[2][mid]; //IO+IIII[o]=min(II[o],II[o<<1]+deng[o<<1|1]+lu[1][mid]+lu[2][mid]); //II+=II[o]=min(II[o],deng[o<<1]+II[o<<1|1]+lu[1][mid]+lu[2][mid]); //=+IIII[o]=min(II[o],II[o<<1]+OI[o<<1|1]+lu[1][mid]+lu[2][mid]); //II+OIII[o]=min(II[o],II[o<<1]+II[o<<1|1]+min(lu[1][mid],lu[2][mid])); //II+IIOO[o]=deng[o<<1]+deng[o<<1|1]+min(lu[1][mid],lu[2][mid]); //=+=OO[o]=min(OO[o],deng[o<<1]+OO[o<<1|1]+lu[1][mid]+lu[2][mid]); //=+OOOO[o]=min(OO[o],deng[o<<1]+IO[o<<1|1]+min(lu[1][mid],lu[2][mid])); //=+IO OO[o]=min(OO[o],OI[o<<1]+IO[o<<1|1]+min(lu[1][mid],lu[2][mid])); //OI+IOOO[o]=min(OO[o],OI[o<<1]+OO[o<<1|1]+lu[1][mid]+lu[2][mid]); //OI+OOOO[o]=min(OO[o],OI[o<<1]+deng[o<<1|1]+min(lu[1][mid],lu[2][mid])); //OI+= OO[o]=min(OO[o],OO[o<<1]+deng[o<<1|1]+lu[1][mid]+lu[2][mid]); //OO+= OO[o]=min(OO[o],OO[o<<1]+IO[o<<1|1]+lu[1][mid]+lu[2][mid]); //OO+IO deng[o]=deng[o<<1]+deng[o<<1|1]+lu[1][mid]+lu[2][mid]; //=+=}
void jian(int l,int r,int o)
{
int mid=(l+r)>>1;
if(l==r)
{
II[o]=lu[3][l];IO[o]=OI[o]=1e9+7;deng[o]=0;
return;
}
jian(zuo);
jian(you);
up(o,mid);
}
void wen(int l,int r,int o)
{if(a<=l&&r<=b){if(yici){linOI=OI[o];linIO=IO[o];linOO=OO[o];lindeng=deng[o];linII=II[o];yici=0; }else{llinIO=linII+lu[1][l-1]+lu[2][l-1]+OO[o]; //II+OOllinIO=min(llinIO,linII+min(lu[1][l-1],lu[2][l-1])+IO[o]); //II+IOllinIO=min(llinIO,linII+min(lu[1][l-1],lu[2][l-1])+deng[o]); //II+=llinIO=min(llinIO,linIO+lu[1][l-1]+lu[2][l-1]+deng[o]); //IO+=llinIO=min(llinIO,linIO+IO[o]+lu[1][l-1]+lu[2][l-1]); //IO+IOllinIO=min(llinIO,lindeng+lu[1][l-1]+lu[2][l-1]+IO[o]); //=+IOllinOI=linOI+lu[1][l-1]+lu[2][l-1]+deng[o]; //OI+=llinOI=min(llinOI,linOI+lu[1][l-1]+lu[2][l-1]+OI[o]); //OI+OIllinOI=min(llinOI,linOI+min(lu[1][l-1],lu[2][l-1])+II[o]); //OI+IIllinOI=min(llinOI,linOO+II[o]+lu[1][l-1]+lu[2][l-1]); //OO+IIllinOI=min(llinOI,lindeng+lu[1][l-1]+lu[2][l-1]+OI[o]); //=+OIllinOI=min(llinOI,lindeng+min(lu[1][l-1],lu[2][l-1])+II[o]); //=+IIllinII=linIO+II[o]+lu[1][l-1]+lu[2][l-1]; //IO+IIllinII=min(llinII,linII+deng[o]+lu[1][l-1]+lu[2][l-1]); //II+=llinII=min(llinII,lindeng+II[o]+lu[1][l-1]+lu[2][l-1]); //=+IIllinII=min(llinII,linII+OI[o]+lu[1][l-1]+lu[2][l-1]); //II+OIllinII=min(llinII,linII+II[o]+min(lu[1][l-1],lu[2][l-1])); //II+IIllinOO=lindeng+deng[o]+min(lu[1][l-1],lu[2][l-1]); //=+=llinOO=min(llinOO,lindeng+OO[o]+lu[1][l-1]+lu[2][l-1]); //=+OOllinOO=min(llinOO,lindeng+IO[o]+min(lu[1][l-1],lu[2][l-1])); //=+IO llinOO=min(llinOO,linOI+IO[o]+min(lu[1][l-1],lu[2][l-1])); //OI+IOllinOO=min(llinOO,linOI+OO[o]+lu[1][l-1]+lu[2][l-1]); //OI+OOllinOO=min(llinOO,linOI+deng[o]+min(lu[1][l-1],lu[2][l-1])); //OI+= llinOO=min(llinOO,linOO+deng[o]+lu[1][l-1]+lu[2][l-1]); //OO+= llinOO=min(llinOO,linOO+IO[o]+lu[1][l-1]+lu[2][l-1]); //OO+IO llindeng=lindeng+deng[o]+lu[1][l-1]+lu[2][l-1];
linOO=llinOO;
linII=llinII;
linOI=llinOI;
linIO=llinIO;
lindeng=llindeng;}return ;}int mid=(l+r)>>1;if(a<=mid)wen(zuo);if(b>mid)wen(you);
}
void gai(int l,int r,int o)
{int mid=(l+r)>>1;if(l==r){II[o]=lu[3][l];IO[o]=OI[o]=1e9+7;deng[o]=0;return;}if(a<=mid)gai(zuo);else gai(you);up(o,mid);
}
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<n;i++)scanf("%d",&lu[1][i]);
for(i=1;i<n;i++)scanf("%d",&lu[2][i]);
for(i=1;i<=n;i++)scanf("%d",&lu[3][i]);
jian(1,n,1);
for(i=1;i<=m;i++)
{scanf("%c",&op);while(op!='Q'&&op!='C')scanf("%c",&op);if(op=='Q'){scanf("%d%d",&a,&b);yici=1;wen(1,n,1);printf("%d\n",linII); }else{scanf("%d%d%d%d%d",&x,&y,&xx,&yy,&z);if(yy<y)swap(y,yy);if(x==xx&&x==1)lu[1][y]=z;if(x==xx&&x==2)lu[2][y]=z;if(x!=xx)lu[3][y]=z; a=y;gai(1,n,1); }
}
}
2017.5.11 道路修建 思考记录相关推荐
- 2017.4.27 道路游戏 思考记录
这个题一开始把题读错了..而且读错三次(出这种语文题 简直毒瘤) 一开始认为成了可以一边买一边跑...结果发现是n^4 然后认为成了可以不移动结束就可以买....结果发现是n^3 于是全wa 然后认 ...
- 2017.3.24 分裂游戏 思考记录
事先说明:这不是好题解,这只是思考记录 同机房的xp都学博弈了.. 感觉还是学学看吧 先来看一下简单的nim: 题目: Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有A[i]个 ...
- 2017.9.21 道路修建(noi2011) 思考记录
这个题,,dfs即可 但听说dfs会爆栈,还会被卡. 所以就写了一个拓扑. noi2011很良心啊 码(不知为何,非常的慢): #include<cstdio> #include<c ...
- 解码2017双11:全球狂欢新记录背后的阿里云存储
摘要: 2017天猫双11再次刷新纪录,这背后是大数据的支撑和阿里云计算的能力的体现.手淘.天猫APP主站的所有图片和视频都存储在阿里云对象存储OSS之上,全球数以亿计的消费者,对这些商品的访问的流量 ...
- 2017.10.24 上升序列 思考记录
终于有会做的题了... 一开始想用正常的lis ,然后从前往后扫, 由于最优查询区间在序列上是按顺序单调递增的,所以想记录每个点取哪个值跳到哪,这样是n*m logn的 然后发现既然是单调递增的那直接 ...
- 2017.10.7 括号序列 思考记录
这个题看起来很简单,但细节比较麻烦.参考完别人的代码后才想出自己的解法的.. 一开始认为已匹配的括号是可以直接消的,所以就只维护了两个变量 但还有区间取反.. 由于和已配对的括号的顺序有关,所以不是很 ...
- 2017.9.28 约数研究 思考记录
这个题一开始可能会想复杂, 然而它需要对答案的贡献进行归类 可以发现,一个约数对其倍数的数贡献是一样的,,所以可以考虑离散 所以直接对于每个数不好求,就可以考虑每个约数的贡献 而每个约数i就有n/i个 ...
- 2017.7.27 排列perm 思考记录
这个题可以通过技巧找思路的. 首先,字符串小于10,那么这肯定是用来状压的. 用来存数肯定不行,能用0.1表示的可以是使用情况 还要满足倍数,所以我们可以存余数 那么就好做了,直接递推dp 还要注意如 ...
- 2017.5.9 积木大赛 思考记录
为什么要把这个题放上来?因为这个题还是很有代表性的 首先必须要跳出模拟的思考: 可以忽视每一步具体的操作,直接看目标,这样就会总结出一些规律: 连续上升或连续下降的序列次数一定是最大值,因为每次都可以 ...
最新文章
- python写一个通讯录step by step V3.0
- 用计算机进行图片处理教学设计,三年级信息技术上教学设计
- SDH点对点接入与MPLS有什么区别?——Vecloud
- oracle including new values,物化视图日志加不加INCLUDING NEW VALUES有什么影响
- 一个还不错的源码解析网站
- 优秀!22岁读博士,26岁当教授,因为太优秀反而没人敢追?
- 浏览器中跨域创建cookie的问题
- 中国程序员和外国程序员
- Spring MVC 3.0 RESTful controller
- MySQL官方提供的日志分析工具_MySQL 日志分析的几款工具-Fun言
- 「实用」打造自我感觉非常漂亮的Mac终端
- Windows10数据线连接坚果手机SmartisanTNT
- 程序员自我修养阅读笔记——动态链接
- SpringMVC+Vue实现前后端的志愿者招募网站
- 中小学数学卷子自动生成程序-----队友项目评价
- Codeforces Round 783 补题
- 北大陈向群第十二章知识点
- 一天2起电动汽车起火事件:特斯拉之后,蔚来又烧了
- 实现掘金导航栏+float按钮其实可以很简单
- 2018年4月高等教育国际金融全国统一命题考试
热门文章
- php mysql 到表最后_如何在PHP中获取MySQL表的最后插入ID?
- ZooKeeper的安装和API
- LeetCode-118杨辉三角C++详解
- 下载OneDrive共享的数据集
- new Date(date).getTime()的兼容问题
- c fun函数求n个整数的平均值_c语言题目(求阶乘)
- Java中的变量Variable
- 单片机c语言字符,单片机C语言中变量的定义方法解析
- 无线打印机 连接路由器连接到服务器,怎么通过无线路由器连到有的打印机线网络...
- mysql innodb_file_per_table=1_mysql-5.7 innodb_file_per_table 详解