zoj 3888 线段树 ***
卡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 线段树 ***的更多相关文章
- ZOJ 3279-Ants(线段树)
传送门:zoj 3279 Ants Ants Time Limit: 2 Seconds Memory Limit: 32768 KB echo is a curious and cleve ...
- Prime Query (ZOJ 3911 线段树)
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a sequen ...
- F - Count the Colors ZOJ - 1610 线段树染色(染区间映射)
题意:给一段0-8000的线段染色 问最后 颜色x 有几段 题解:标准线段树 但是没有push_up 最后查询是单点按顺序查询每一个点 考虑过使用区间来维护不同的线段有多少种各色的线段 思路是 ...
- ZOJ 3911 线段树
题意:有N个数字,M个操作,然后回答每个Q开头的询问 操作形式: A val pos:在pos位置上+val Q l r:询问l~r之间有多少个质数 R val l r:把l~r之间的数字替换成val ...
- HDU 1199 && ZOJ 2301 线段树离散化
一段长度未知的线段.一种操作:a b c ,表示区间[a,b]涂为颜色C,w代表白色,b代表黑色,问终于的最长连续白色段,输出起始位置和终止位置 离散化处理.和寻常的离散化不同,须要把点化成线段.左闭 ...
- zoj 2706 线段树
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1706 trick:关于正数和负数的整除问题,正数整除是自动向下取整的 ...
- ZOJ 3299 线段树 离散化
本来是个很简单的题目,难住我的主要是这么几点 1.它所有的点都是坐标,不是实际的砖块,1,3指的是1-2 2-3的砖块...后来就是用1 代表1-2 ,2代表2-3.....,这样的话,每次读入的数据 ...
- 群赛 ZOJ3741(dp) ZOJ3911(线段树)
zoj3741 简单dp.wa了两个小时,中间改了好多细节.后来还是不对,参考了别人的代码,发现一个致命问题,初始化的时候,不是每种状态都能直接达到的.初始化成-1. (题目有个小坑,0<=L& ...
- zoj 3888 Twelves Monkeys 二分+线段树维护次小值
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemCode=3888 Twelves Monkeys Time Limit: 5 ...
随机推荐
- do{...}while(0)的意义和用法
linux内核和其他一些开源的代码中,经常会遇到这样的代码: do{ ... }) 这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢? 实际上,do{. ...
- 【Linux】find grep 联合使用 过滤所有子目录、文件
find . -type f -name '*.*' | xargs grep --color -n 'Admin@123'find . -type f -name '*.*' | xargs sed ...
- c#之Insert字符串的三种写法
1.Format Format(String, Object) 将指定字符串中的一个或多个格式项替换为指定对象的字符串表示形式. ex1:简单示例怎么应用 private void btnTest_C ...
- wxPython+Boa Constructor环境配置
配置之前先完成eclipse + Pydev的配置环境.详见http://www.cnblogs.com/dflower/archive/2010/05/13/1734522.html 1. 安装 w ...
- ffmpeg-20160526-git-bin
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...
- iOS MD5加密实现方法
使用方法 先导入头文件 #import "MD5.h" //md5测试 NSString * md1= [MD5 md5:" ]; NSLog(@"32bit= ...
- Effective C++ -----条款11: 在operator=中处理“自我赋值”
确保当对象自我赋值时operator=有良好行为.其中技术包括比较“来源 对象”和“目标对象”的地址.精心周到的语句顺序.以及copy-and-swap. 确定任何函数如果操作一个以上的对象,而其中多 ...
- 2101 Problem A Snake Filled
题目描述 “What a boring world!”Julyed felt so bored that she began to write numbers on the coordinate pa ...
- git remote 相关用法
为了便于管理,Git要求每个远程主机都必须指定一个主机名.git remote 命令就用于管理主机名. 不带选项的时候,git remote命令列出所有远程主机. $ git remote orig ...
- October 7th 2016 Week 41st Friday
The land didn't move, but moved; the sea was not still, yet was still. 大地止而亦行,大海动而亦静. Remember that ...