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-线段树的更多相关文章

  1. CF 19D 线段树+set压缩坐标轴+离散化map

    题意: n个操作,在200000*200000的平面上加删点 find 严格在坐标右上角,x最小,再y最小的点 线段树做,区间为离散化后的 X轴坐标 ,维护区间点数 和 最小的 y 值 ( 维护最小y ...

  2. CF 552(div 3) E Two Teams 线段树,模拟链表

    题目链接:http://codeforces.com/contest/1154/problem/E 题意:两个人轮流取最大值与旁边k个数,问最后这所有的数分别被谁给取走了 分析:看这道题一点思路都没有 ...

  3. CF 1023D Array Restoration - 线段树

    题解 非常容易想到的线段树, 还可以用并查集来. 还有一位大神用了$O(n)$ 就过了Orz 要判断是否能染色出输入给出的序列,必须满足两个条件: 1. 序列中必须存在一个$q$ 2. 两个相同的数$ ...

  4. cf 786 B 线段树优化建图

    cf 786 B 链接 CF 思路 n个点,3种建边方式,规模\(O(n^2)\) 线段树优化建图 注意 读入的数据好坑啊,说好的v,u变成了u,v. 两棵树,一棵出,一棵入.线段树的作用只不过是按照 ...

  5. CF 787D Legacy(线段树思想构图+最短路)

    D. Legacy time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  6. CF 666E Forensic Examination 【SAM 倍增 线段树合并】

    CF 666E Forensic Examination 题意: 给出一个串\(s\)和\(n\)个串\(t_i\),\(q\)次询问,每次询问串\(s\)的子串\(s[p_l:p_r]\)在串\(t ...

  7. DFS序+线段树+bitset CF 620E New Year Tree(圣诞树)

    题目链接 题意: 一棵以1为根的树,树上每个节点有颜色标记(<=60),有两种操作: 1. 可以把某个节点的子树的节点(包括本身)都改成某种颜色 2. 查询某个节点的子树上(包括本身)有多少个不 ...

  8. 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 ...

  9. [CF 474E] Pillars (线段树+dp)

    题目链接:http://codeforces.com/contest/474/problem/F 意思是给你两个数n和d,下面给你n座山的高度. 一个人任意选择一座山作为起始点,向右跳,但是只能跳到高 ...

  10. CF 197 DIV2 Xenia and Bit Operations 线段树

    线段树!!1A 代码如下: #include<iostream> #include<cstdio> #define lson i<<1 #define rson i ...

随机推荐

  1. docker的安装和使用

    docker在linux上安装我尝试了几次,都报错了,看到其它人的博客说明这也确实是个问题. 后来在朋友给安装了一个VMware虚拟机后,很方便地就在里面进行了安装. 概念理解: 仓库: 别人做好的现 ...

  2. Microsoft.EntityFrameworkCore.Sqlite的学习

    SQLite in ASP.NET Core with EntityFrameworkCore ASP.NET Core 2: Using SQLite as a light weight datab ...

  3. module.exports 与 exports

    module.exports 与 exports 注意:1 对于要导出的属性,可以简单直接挂到 exports 对象上2 对于类,为了直接使导出的内容作为类的构造器可以让调用者使用 new 操作符创建 ...

  4. 原生JS取代一些JQuery方法的简单实现

    原生JS取代一些JQuery方法的简单实现 下面小编就为大家带来一篇原生JS取代一些JQuery方法的简单实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   1.选 ...

  5. Centos6.8安装redis(一)

    最近有在学习会话共享的配置,其中一种呢是 nginx+redis+tomcat 的会话共享配置,在记录此会话共享配置之前呢先记录下redis等的安装.这篇先简单记录下redis的安装,是其中一种方式, ...

  6. header 格式

    headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,* ...

  7. STL_string.vector中find到的iterator的序号

    ZC:注意,printf("0x%08X\n",vtr.end()); 打印出来 应该就是 0x00000000,∵ 它就是 指向最后一个元素的后面,应该是理解成 无意义      ...

  8. webpack 使用

    背景: 简而言之,如果你曾经遇到过以下任何一种情况:载入有问题的依赖项遇到作用域的问题 —— CSS 和 JavaScript 都会有寻找一个让你在 JavaScript 中使用 Node/Bower ...

  9. Linux环境下的Scala环境搭建

    1.下载tag软件包后,我习惯放到software文件夹下,并建立app文件夹2.通过tar -zxvf scala-2.12.8.tgz -C ~/app/ 命令解压到app目录下(-C 是指定目录 ...

  10. lua --- Module

    首先需要明白,一般情况下,我们的定义的lua模块的文件与模块名(其实就是table的名字)是一致的,当然,不一致代码也是可以编译的(亲测),之所以这样,本人认为是为了实际项目中管理的方便.以下是定义模 ...