CF-413E-线段树
http://codeforces.com/problemset/problem/413/E
给出一个2*N的格子图,每个格子要么是障碍要么是空地,M次询问(A,B)之间的最短距离。
采用分治的思想,由于只有两行,那么对于任意两列,起点和终点的组合方式只有四种,令d[i][]表示第i个节点对应的区间内,左上-右上,左下-右下,左上-右下,左下-右上的最短路,询问的时候也返回
一个一维数组就好了,对应四种不同的走向。
zb的写了个LL*返回结果调试半天,发现指向的是一片临时区域,函数结束时销毁了这片内存所以值在中间就没了= =。换了new就好了。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<map>
#include<set>
#include<vector>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define pii pair<int,int>
#define mid ((L+R)>>1)
#define lc (id<<1)
#define rc (id<<1|1)
#define pb push_back
#define mp make_pair
#define inf 500000
#define linf 0xffffffffffff
const int maxn=;
char e[][maxn];
LL d[maxn<<][];
void build(int id,int L,int R){
if(L==R){
d[id][]=e[][L]=='X'?inf:;
d[id][]=e[][L]=='X'?inf:;
d[id][]=e[][L]=='X'||e[][L]=='X'?inf:;
d[id][]=e[][L]=='X'||e[][L]=='X'?inf:;
}
else{
build(lc,L,mid);
build(rc,mid+,R);
{
d[id][]=+min(d[lc][]+d[rc][],d[lc][]+d[rc][]);
d[id][]=+min(d[lc][]+d[rc][],d[lc][]+d[rc][]);
d[id][]=+min(d[lc][]+d[rc][],d[lc][]+d[rc][]);
d[id][]=+min(d[lc][]+d[rc][],d[lc][]+d[rc][]);
}
}
}
int tot=;
LL* ask(int id,int L,int R,int l,int r){
if(L>=l&&R<=r){
return d[id];
}
if(r<=mid){
return ask(lc,L,mid,l,r);
}
else if(l>mid){
return ask(rc,mid+,R,l,r);
}
else{
LL *p=ask(lc,L,mid,l,r),*q=ask(rc,mid+,R,l,r);
LL *ret=new LL[];
{
ret[]=+min(p[]+q[],p[]+q[]);
ret[]=+min(p[]+q[],p[]+q[]);
ret[]=+min(p[]+q[],p[]+q[]);
ret[]=+min(p[]+q[],p[]+q[]);
}
return ret;
}
}
int main()
{
int u,v,N,M,i;
scanf("%d%d",&N,&M);
scanf("%s %s",e[]+,e[]+);
build(,,N);
while(M--){
scanf("%d%d",&u,&v);
int _u=(u-)%N+,_v=(v-)%N+;
if(_u>_v)swap(_u,_v),swap(u,v);
LL *ans;
ans=ask(,,N,_u,_v);
if(u<=N&&v<=N&&ans[]<inf){
printf("%lld\n",ans[]);
}
else if(u>N&&v>N&&ans[]<inf){
printf("%lld\n",ans[]);
}
else if(u<=N&&v>N&&ans[]<inf){
printf("%lld\n",ans[]);
}
else if(u>N&&v<=N&&ans[]<inf){
printf("%lld\n",ans[]);
}
else{
puts("-1");
}
}
return ;
}
CF-413E-线段树的更多相关文章
- CF 19D 线段树+set压缩坐标轴+离散化map
题意: n个操作,在200000*200000的平面上加删点 find 严格在坐标右上角,x最小,再y最小的点 线段树做,区间为离散化后的 X轴坐标 ,维护区间点数 和 最小的 y 值 ( 维护最小y ...
- CF 552(div 3) E Two Teams 线段树,模拟链表
题目链接:http://codeforces.com/contest/1154/problem/E 题意:两个人轮流取最大值与旁边k个数,问最后这所有的数分别被谁给取走了 分析:看这道题一点思路都没有 ...
- CF 1023D Array Restoration - 线段树
题解 非常容易想到的线段树, 还可以用并查集来. 还有一位大神用了$O(n)$ 就过了Orz 要判断是否能染色出输入给出的序列,必须满足两个条件: 1. 序列中必须存在一个$q$ 2. 两个相同的数$ ...
- cf 786 B 线段树优化建图
cf 786 B 链接 CF 思路 n个点,3种建边方式,规模\(O(n^2)\) 线段树优化建图 注意 读入的数据好坑啊,说好的v,u变成了u,v. 两棵树,一棵出,一棵入.线段树的作用只不过是按照 ...
- CF 787D Legacy(线段树思想构图+最短路)
D. Legacy time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- CF 666E Forensic Examination 【SAM 倍增 线段树合并】
CF 666E Forensic Examination 题意: 给出一个串\(s\)和\(n\)个串\(t_i\),\(q\)次询问,每次询问串\(s\)的子串\(s[p_l:p_r]\)在串\(t ...
- DFS序+线段树+bitset CF 620E New Year Tree(圣诞树)
题目链接 题意: 一棵以1为根的树,树上每个节点有颜色标记(<=60),有两种操作: 1. 可以把某个节点的子树的节点(包括本身)都改成某种颜色 2. 查询某个节点的子树上(包括本身)有多少个不 ...
- CF #296 (Div. 1) A. Glass Carving 线段树
A. Glass Carving time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- [CF 474E] Pillars (线段树+dp)
题目链接:http://codeforces.com/contest/474/problem/F 意思是给你两个数n和d,下面给你n座山的高度. 一个人任意选择一座山作为起始点,向右跳,但是只能跳到高 ...
- CF 197 DIV2 Xenia and Bit Operations 线段树
线段树!!1A 代码如下: #include<iostream> #include<cstdio> #define lson i<<1 #define rson i ...
随机推荐
- (转) Read-through: Wasserstein GAN
Sorta Insightful Reviews Projects Archive Research About In a world where everyone has opinions, on ...
- 用原型封装一个操作DOM的例子
<script> // 一句话 在构造函数里面写属性 在原型里面写方法 function Elem(d){ this.even=document.getElementById(d); } ...
- HBase底层存储原理
HBase底层存储原理——我靠,和cassandra本质上没有区别啊!都是kv 列存储,只是一个是p2p另一个是集中式而已! 首先HBase不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数 ...
- Jquery相关插件
jQuery 插件autocomplete 应用 介绍 $("#AccountNames").autocomplete(Accounts, { minChars: 0, match ...
- QLineEdit响应回车时避免Button同时响应
pButton->setAutoDefault(false);
- Long类型转json时前端js丢失精度解决方案
一.问题背景 Java后端开发过程中,尤其是id字段,因数值太大,通过json形式传输到前端后,在js解析时,会丢失精度. 如果对精度丢失没有什么概念,可以看一个知乎的帖子,来感受一下:https:/ ...
- 给大家讲个故事,感受一下什么叫CF。不知道的请认真听。
我朋友是个温柔.体贴.负责.做事认真和口才流利的好男人 他在大一时喜欢上别系的女同学,像他这样的好人我以为这段恋情是手到擒来 但并没有,女方只把它当工具人,一当就当了四年 身为室友的我每天看著她为女方 ...
- Navicat for MySQL用ssh功能连接远程数据库
转载自:http://holy2010.blog.51cto.com/1086044/518431 实现用本地的ssh隧道起到加密功能 在windows平台上运行Navicat for MySQL(h ...
- 1.spring基础知识讲解
引言:以下记录一些自己在使用时pringle框架时的一些自己心得合成体会时,如有侵权,请联系本博主. 1. spring基本都使用 spring是一个开源的轻量级框架,其目的是用于简化企业级应用程序开 ...
- 一般删除网页数据和jquery下使用Ajax删除数据的区别
1. 一般删除网页数据 就是指用户在点击删除的时候,会跳转到DeleteUser.ashx一般处理程序中,并且通过get传参的方式传递一个id的参数,然后在后台处理 <a href='Delet ...