FOJ2022车站 线段树区间合并
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车站 线段树区间合并的更多相关文章
- POJ 3667 Hotel(线段树 区间合并)
Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...
- HDU 3911 线段树区间合并、异或取反操作
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...
- HDU 3911 Black And White(线段树区间合并+lazy操作)
开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...
- HYSBZ 1858 线段树 区间合并
//Accepted 14560 KB 1532 ms //线段树 区间合并 /* 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[ ...
- poj3667 线段树 区间合并
//Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...
- hdu3911 线段树 区间合并
//Accepted 3911 750MS 9872K //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...
- 线段树(区间合并) POJ 3667 Hotel
题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...
- HDU 3308 LCIS (线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...
- SPOJ GSS1_Can you answer these queries I(线段树区间合并)
SPOJ GSS1_Can you answer these queries I(线段树区间合并) 标签(空格分隔): 线段树区间合并 题目链接 GSS1 - Can you answer these ...
随机推荐
- hdu 2481 Toy
好题!!!没话说…… 用到的知识面很多,这题的难点在于公式的推导. 原始推导过程见:http://hi.baidu.com/spellbreaker/item/d8bb3bda5af30be6795d ...
- 荣耀3X畅玩版狙击红米note!
华为与小米的战争史,可以追溯到 红米 799,华为独立初荣耀品牌推出荣耀3C,定价798,就是比你少一快; 小米3 定价1999,华为出荣耀3X,定价1980; 最近的红米Note,标配版定价799, ...
- 360 chrome不能登录Google账户
用过Google chrome,枫树,360 chrome国际版,今天还是回到Google chrome了. 因为除了Chrome自己,其他的都不能正常登录Google账户(偶尔偶尔一次可以,直到今天 ...
- Openfire 代码部署报错: Variable references non-existent resource:${workspace_loc:openfire_src}
Variable references non-existent resource:${workspace_loc:openfire_src} -DopenfireHome=“${workspace_ ...
- VirtualUI - Convert your Windows App to HTML5
http://www.cybelesoft.com/thinfinity/virtualui/
- Go推出的主要目的之一就是G内部大东西太多了,系统级开发巨型项目非常痛苦,Go定位取代C++,Go以简单取胜(KISS)
以前为了做compiler,研读+实现了几乎所有种类的语言.现在看语法手册几乎很快就可以理解整个语言的内容.后来我对比了一下go和rust,发现go的类型系统简直就是拼凑的.这会导致跟C语言一样,需要 ...
- SVN与Eclipse整合
SVN与Eclipse整合 下载SVN插件(http://subclipse.tigris.org) 我们使用版本eclipse_svn_site-1.6.5.zip 解压到一个文件夹中 进入ecli ...
- servlet会话技术:Cookie
什么是会话会话可以简单理解为:用户开一个浏览器访问某个网站,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话.会话过程中需要解决的一些问题每个用户在使用浏览器与服务器进 ...
- Nginx+Tomcat+Memcached负载均衡集群服务搭建
操作系统:CentOS6.5 本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...
- Hibernate HQL查询的参数绑定
参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: ...