卡n^2,用线段树降到nlogn

记录每个点上所覆盖线段的次小值,保证能有两条路径能走

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root 1,n,1
#define mid ((l+r)>>1)
typedef long long ll;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
const int N=;
int n,m,tt;
int a[N<<],b[N<<];
void pushdown(int rt)
{
//printf("pd:%d %d %d\n",a[rt],b[rt],rt);
if(b[rt]!=)
{
if(b[rt]>=a[rt<<]&&b[rt]<b[rt<<])
{
b[rt<<]=b[rt];
}
if(b[rt]<a[rt<<])
{
a[rt<<]=b[rt<<];
a[rt<<]=b[rt];
}
if(b[rt]>=a[rt<<|]&&b[rt]<b[rt<<|])
{
b[rt<<|]=b[rt];
}
if(b[rt]<a[rt<<|])
{
b[rt<<|]=a[rt<<|];
a[rt<<|]=b[rt];
}
b[rt]=;
}
/*if(rt==4)
{
printf("%d %d\n",a[rt<<1],b[rt<<1]);
}*/
if(a[rt]!=)
{
if(a[rt]>=a[rt<<]&&a[rt]<b[rt<<])
{
b[rt<<]=a[rt];
}
if(a[rt]<a[rt<<])
{
b[rt<<]=a[rt<<];
a[rt<<]=a[rt];
}
if(a[rt]>=a[rt<<|]&&a[rt]<b[rt<<|])
{
b[rt<<|]=a[rt];
}
if(a[rt]<a[rt<<|])
{
b[rt<<|]=a[rt<<|];
a[rt<<|]=a[rt];
}
a[rt]=;
}
//printf("%d %d ++%d++\n",a[rt<<1],b[rt<<1],rt<<1);
}
void build(int l,int r,int rt)
{
a[rt]=b[rt]=;
if(l==r)
{
a[rt]=b[rt]=l;
return;
}
build(lson);
build(rson);
}
void update(int L,int R,int val,int l,int r,int rt)
{
if(l>=L&&r<=R)
{
int x=val;
if(b[rt]>x&&x>a[rt])
{
b[rt]=x;
}
if(x<b[rt])
{
b[rt]=a[rt];
a[rt]=x;
}
return;
}
pushdown(rt);
if(L<=mid) update(L,R,val,lson);
if(R>mid) update(L,R,val,rson);
}
int query(int pos,int l,int r,int rt)
{
//printf("%d %d %d %d %d\n",a[rt],b[rt],l,r,rt);
if(l==r)
{
return b[rt];
}
pushdown(rt);
if(pos<=mid) return query(pos,lson);
else return query(pos,rson);
}
int main()
{
int i,j,k,ca=,q;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(scanf("%d%d%d",&n,&m,&q)!=EOF)
{
int x,y;
build(root);
for(i=;i<m;i++)
{
scanf("%d%d",&y,&x);
update(x,y,x,root); //记录次小x
}
while(q--)
{
scanf("%d",&x);
printf("%d\n",x-query(x,root));
}
}
}

zoj 3888 线段树 ***的更多相关文章

  1. ZOJ 3279-Ants(线段树)

    传送门:zoj 3279 Ants Ants Time Limit: 2 Seconds      Memory Limit: 32768 KB echo is a curious and cleve ...

  2. Prime Query (ZOJ 3911 线段树)

    Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a sequen ...

  3. F - Count the Colors ZOJ - 1610 线段树染色(染区间映射)

    题意:给一段0-8000的线段染色 问最后 颜色x 有几段 题解:标准线段树  但是没有push_up  最后查询是单点按顺序查询每一个点 考虑过使用区间来维护不同的线段有多少种各色的线段  思路是 ...

  4. ZOJ 3911 线段树

    题意:有N个数字,M个操作,然后回答每个Q开头的询问 操作形式: A val pos:在pos位置上+val Q l r:询问l~r之间有多少个质数 R val l r:把l~r之间的数字替换成val ...

  5. HDU 1199 &amp;&amp; ZOJ 2301 线段树离散化

    一段长度未知的线段.一种操作:a b c ,表示区间[a,b]涂为颜色C,w代表白色,b代表黑色,问终于的最长连续白色段,输出起始位置和终止位置 离散化处理.和寻常的离散化不同,须要把点化成线段.左闭 ...

  6. zoj 2706 线段树

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1706 trick:关于正数和负数的整除问题,正数整除是自动向下取整的 ...

  7. ZOJ 3299 线段树 离散化

    本来是个很简单的题目,难住我的主要是这么几点 1.它所有的点都是坐标,不是实际的砖块,1,3指的是1-2 2-3的砖块...后来就是用1 代表1-2 ,2代表2-3.....,这样的话,每次读入的数据 ...

  8. 群赛 ZOJ3741(dp) ZOJ3911(线段树)

    zoj3741 简单dp.wa了两个小时,中间改了好多细节.后来还是不对,参考了别人的代码,发现一个致命问题,初始化的时候,不是每种状态都能直接达到的.初始化成-1. (题目有个小坑,0<=L& ...

  9. zoj 3888 Twelves Monkeys 二分+线段树维护次小值

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemCode=3888 Twelves Monkeys Time Limit: 5 ...

随机推荐

  1. (转) 站在C#和JS的角度细谈函数式编程与闭包

    1.函数式编程是什么? 摘自百度的说法是.函数式编程是种编程典范,它将电脑运算视为函数的计算.函数编程语言最重要的基础是 λ 演算(lambda calculus).而且λ演算的函数可以接受函数当作输 ...

  2. IPC---共享内存

    共享内存就是允许两个或多个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据时,不需要在客户进程和服务器进程之间幅值,因此是最快的一种IPC.不同进程之间共享的内存通常安 ...

  3. React 源码解读参考,理解原理。

    Rubix - ReactJS Powered Admin Template 文档:   http://rubix-docs.sketchpixy.com/ ===================== ...

  4. POJ 2769

    http://poj.org/problem?id=2796 题意:求n个数的和乘以这n个数中的最小值的积最大的数,以及其范围. 思路:求每一个数两边的比其大的数的和,再乘以这个数.还有一个范围,用单 ...

  5. POJ 1661

    http://poj.org/problem?id=1661 这是一道DP的题目,求最优解 上面的这一个题是对于那个重左边开始上的函数的解释 题目要求的是从最高掉下来的小时间,那么我们就可以求从最低处 ...

  6. hdu4117

    题意:给出一串单词,每个有一个权值.顺序不变的情况下,删掉一些,使得相邻两单词,前一个是后一个的子串.同时要求使得剩余单词权值和最大.求最大是多少. 分析: AC自动机+线段树+DP. 这是一个比较复 ...

  7. iOS 活动图 流程图

    活动图        活动图和状态机图都被称为演化图,其区别和联系如下:       1.活动图:用于描述用例内部的活动或方法的流程,如果除去活动图中的并行活动描述以后,它就变成流程图.       ...

  8. C#操作字符串方法总结<转>

    staticvoid Main(string[] args) { string s =""; //(1)字符访问(下标访问s[i]) s ="ABCD"; Co ...

  9. 开发简单的Kafka应用

    之前基于集群和单机安装过kafka,现在利用kafka提供的API构建一个简单的生产者消费者的项目示例,来跑通kafka的流程,具体过程如下: 首先使用eclipse for javaee建立一个ma ...

  10. ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)

    这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...