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. Bytom国密网说明和指南

    比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 国密算法 ...

  2. Validation in jQuery

    jquery.validate.js github地址 官方主页 doc demo jquery-validation-unobtrusive github地址 demo doc

  3. hadoop的Linux操作

    初学hadoop之linux系统操作的hdfs的常用命令 Hadoop之HDFS文件操作 Hadoop fs命令详解 官网doc sudo su - hdfs:免密,以hdfs账户登陆.可操作hdfs ...

  4. PTA 7-2 列车调度(25 分)

    7-2 列车调度(25 分) 火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道 ...

  5. 在centos6中编译安装httpd-2.4/搭建LAMP

    首先确保centos6安装平台安装一下环境: #yum groupinstall "Development  Tools" "Server Platform Develo ...

  6. 五、IO编程

    input/output:输入.输出 Stream(流):Input Stream就是数据从外面(磁盘.网络)流进内存,Output Stream就是数据从内存流到外面去.(流:相当于管道) 由于CP ...

  7. HTML XHTML HTNL5 简介

    XHTML 是HTML与XML(扩展标记语言)的结合物 包含了所有与XML语法结合的HTML 4.01元素 XHTML 指可扩展超文本标签语言(EXtensible HyperText Markup ...

  8. codeforces 768D Jon and Orbs

    题目链接:http://codeforces.com/problemset/problem/768/D 令$f[i][j]$表示当前产生过了$i$个球,产生过了$j$个不同的球的概率. ${Ans_i ...

  9. oracle中sql优化

    问题描述:刚开始做项目的时候没啥感觉,只用能出来结果,sql随便写,但是后来用户的数据量达到几万条是,在访问系统,发现很多功能加载都很慢,有的页面一个简单的关联 查询居然要花费30多秒,实在是不能忍, ...

  10. composer require 指定版本

    默认 composer require endroid/qr-code 指定版本 composer require endroid/qr-code 1.9.3 # composer require e ...