http://acm.fzu.edu.cn/problem.php?pid=2022

刚开始MLE,用map对应,果断爆内存了,然后改用去重,离散化, lowbound查找元素位置,速度还不错,不过pushup写也是醉了,一遍遍错,最后发现

if(o[rt].left==INF||o[rt].right==INF||o[rt].left==o[rt].right)l=INF;这一句第三个判断必须加,发现这样可以避免那种只由一个点往上更新的错误,也是非常的伤感。。。。。

/*96655 's source code for D
Memory: 30072 KB Time: 265 MS
Language: GNU C++ Result: Accepted
*/
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<stack>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
const int maxn=+;
const int INF=1e9+;
struct asd
{
int x;
char c;
} q[maxn];
bool vis[maxn];
int a[maxn];
struct node
{
int left,right,v;
} o[maxn<<];
void pushup(int rt)
{
o[rt].left=min(o[rt*].left,o[rt*+].left);
if(o[rt*+].right!=INF) o[rt].right=o[rt*+].right;
else o[rt].right=o[rt*].right;
int l=fabs(o[rt*].right-o[rt*+].left);
if(o[rt].left==INF||o[rt].right==INF||o[rt].left==o[rt].right)l=INF;
o[rt].v=min(min(o[rt*].v,o[rt*+].v),l);
}
void build(int rt,int l,int r)
{
if(l==r)
{
o[rt].left=o[rt].right=o[rt].v=INF;
return;
}
int m=(l+r)>>;
build(rt*,l,m);
build(rt*+,m+,r);
pushup(rt);
}
void change(int rt,int l,int r,int pos,int p)
{
if(l==r)
{
if(p)o[rt].left=o[rt].right=a[l-];
else o[rt].left=o[rt].right=INF;
return;
}
int m=(l+r)>>;
if(pos<=m)change(rt*,l,m,pos,p);
else change(rt*+,m+,r,pos,p);
pushup(rt);
}
int main()
{
int T;
char s[];
while(~scanf("%d",&T))
{
int cnt=,sum=,k=;
for(int i=; i<=T; ++i)
{
scanf("%s",s);
q[i].c=s[];
if(s[]=='m')continue;
scanf("%d",&q[i].x);
a[k++]=q[i].x;
}
sort(a,a+k);
for(int i=; i<k; i++)
if(a[i]!=a[i-])a[cnt++]=a[i];
build(,,cnt);
memset(vis,,sizeof(vis));
for(int i=; i<=T; i++)
{
if(q[i].c=='a')
{
int pos=lower_bound(a,a+cnt,q[i].x)-a;
pos++;
if(vis[pos])continue;
vis[pos]=;
++sum;
change(,,cnt,pos,);
}
else if(q[i].c=='d')
{
int pos=lower_bound(a,a+cnt,q[i].x)-a;
pos++;
if(!vis[pos])continue;
vis[pos]=;
--sum;
change(,,cnt,pos,);
}
else
{
if(sum<)printf("0\n");
else printf("%d\n",o[].v);
}
}
}
return ;
}

唯一值得欣慰的是速度还不错。。。。QAQ

FOJ2022车站 线段树区间合并的更多相关文章

  1. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  2. HDU 3911 线段树区间合并、异或取反操作

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...

  3. HDU 3911 Black And White(线段树区间合并+lazy操作)

    开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...

  4. HYSBZ 1858 线段树 区间合并

    //Accepted 14560 KB 1532 ms //线段树 区间合并 /* 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[ ...

  5. poj3667 线段树 区间合并

    //Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...

  6. hdu3911 线段树 区间合并

    //Accepted 3911 750MS 9872K //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...

  7. 线段树(区间合并) POJ 3667 Hotel

    题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...

  8. HDU 3308 LCIS (线段树区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...

  9. SPOJ GSS1_Can you answer these queries I(线段树区间合并)

    SPOJ GSS1_Can you answer these queries I(线段树区间合并) 标签(空格分隔): 线段树区间合并 题目链接 GSS1 - Can you answer these ...

随机推荐

  1. SpingMVC ModelAttribute的用法

    @Controller @RequestMapping(value = "/test") public class TestController { @RequestMapping ...

  2. 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .

    package com.email.jav; import java.io.File;import java.io.IOException;import java.net.URL; import jx ...

  3. ZOJ 2563 Long Dominoes(状压DP)

    给定一个m*n的方格子,要求用3*1的骨牌去覆盖,骨牌可以用横放或者竖放,问最终有多少种放置方式,将其铺满. 分析:由于最多30行,每行最多9列,所以可以按行来dp,设计每行的状态从而进行转移,考虑每 ...

  4. JVM基础学习

    public class TestJVM { // 运行时数据区[方法区.堆.程序计数器.虚拟机栈.本地方法栈] private static int _1M = 1024 * 1024; publi ...

  5. Linux资源监控命令/工具(网络)

    1.手动/自动设定与启动/关闭IP参数:ifconfig,ifup,ifdown      这三个指令的用途都是在启动网络接口,不过,ifup与ifdown仅能就/etc/sysconfig/netw ...

  6. JAVA学习路线图---(JAVA1234)

    第一阶段-Java基础   这一阶段很重要,关系到你后面阶段的学习,所以务必把这一阶段掌握好: 如果你是0基本,我推荐一本比较好的,适合初学者看的书:明日科技的<Java从入门到精通>,最 ...

  7. jQuery好用插件

    jQuery图片轮播插件(smallslider):http://fz.sjtu.edu.cn/zsw/js/smallslider/ jQuery消息通知(noty):http://www.360d ...

  8. YUV和RGB格式分析

    做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于opencv的处理,很多东西并不需要我们过多深入的去探讨,现在需要完全抛弃现有的算法程序,需要从内存中一个字 ...

  9. jquery.pagination.js分页插件的使用

    Pagination的相关参数: Pagination使用的核心代码:         //回调函数         function pageselectCallback(page_index, j ...

  10. JVM学习笔记(二)------Java代码编译和执行的整个过程

    Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码 ...