首先,显然每个区间的最长连续子区间要么在左孩子里,要么在右孩子里,要么跨越两个孩子。于是我们可以对每个区间维护如下信息ll(left long),rl(rigth long),ml(mid long)分别表示前缀最长长度,后缀最长长度,中间的最长区间长度,并维护即可。

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<string> using namespace std; struct Tree{
int l,r;
int ll,rl,ml;
}; int n,m;
Tree T[]; void buildtree(int now,int l,int r){
T[now].ll=T[now].rl=T[now].ml=r-l+;
T[now].l=l;
T[now].r=r;
if (l==r) return;
buildtree(now<<,l,(l+r)>>);
buildtree((now<<)|,((l+r)>>)+,r);
} void update(int now,int aim,int val){
if (T[now].l==T[now].r){
T[now].ll=T[now].rl=T[now].ml=val;
return;
}
int mid=(T[now].l+T[now].r)>>;
if (aim<=mid) update(now<<,aim,val);
else update((now<<)|,aim,val);
T[now].ll=T[now<<].ll;
T[now].rl=T[(now<<)|].rl;
if (T[now<<].ll==(T[now<<].r-T[now<<].l+)) T[now].ll=T[now].ll+T[(now<<)|].ll;
if (T[(now<<)|].rl==T[(now<<)|].r-T[(now<<)|].l+) T[now].rl+=T[now<<].rl;
T[now].ml=max(T[now<<].ml,T[(now<<)|].ml);
T[now].ml=max(T[now].ml,T[now<<].rl+T[(now<<)|].ll);
} int query(int now,int aim){
if (T[now].l==T[now].r || T[now].ml== || T[now].ml==T[now].r-T[now].l+){
return T[now].ml;
}
int mid=(T[now].l+T[now].r)>>;
if (aim<=mid){
if (aim>=T[now<<].r-T[now<<].rl+)
return query(now<<,aim)+query((now<<)|,mid+);
else
return query(now<<,aim);
}
else{
if (aim<=T[(now<<)|].l+T[(now<<)|].ll-)
return query((now<<)|,aim)+query(now<<,mid);
else
return query((now<<)|,aim);
}
} int main(){
scanf("%d%d",&n,&m);
buildtree(,,n);
for (int cas=;cas<=m;cas++){
int f,x;
scanf("%d%d",&f,&x);
if (f==){
update(,x,);
}
if (f==){
update(,x,);
}
if (f==){
printf("%d\n",query(,x));
}
checktree(,,n);
}
return ;
}
/*
5 3
2 2
0 3
2 2 5 5
2 2
0 3
2 2
1 3
2 2
*/

cdoj 秋实大哥与战争的更多相关文章

  1. CDOJ 1061 C - 秋实大哥与战争 STL set 迭代器

    题目链接: C - 秋实大哥与战争 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Sub ...

  2. UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>

    D - 秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  3. 2015 UESTC 数据结构专题D题 秋实大哥与战争 SET的妙用

    D - 秋实大哥与战争 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...

  4. 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询

    D - 秋实大哥与战争 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...

  5. UESTC 1061 秋实大哥与战争 线段树区间合并

    秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 男儿何不带吴钩, ...

  6. E - 秋实大哥与战争

    秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  7. cdoj 秋实大哥搞算数

    地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: N - 秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)   ...

  8. cdoj 秋实大哥带我飞 最短路走法 含0权边

    //做完这题以后终于理解白书上的边为什么要那样定义了 可以很方便的在o(1) 时间内找到反向边 解法:先跑一边最短路,然后检查最短路上有没有0权边(dfs就好,但是每条边只能走一次,这里就需要用异或找 ...

  9. CDOJ 1146 A - 秋实大哥与连锁快餐店 最小生成树 Prim算法 稠密图

    题目链接 A - 秋实大哥与连锁快餐店 Time Limit:3000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu S ...

随机推荐

  1. 新建Android工程没有自动生成R.JAVA,应该先升级下ADT

    前几天非常郁闷,本来计划在Android上做个小东西,结果打开Eclipse新建工程,发现居然没有R.JAVA! 反复测试很多次,均未成功,最后试着升级了下ADT,结果搞定,在这里记下,下次遇到这样的 ...

  2. Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter

    前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...

  3. 如何有效地配置基于Spring的应用系统

    Spring为应用系统的开发提供了极大的方便,其IoC反向注入(或DI依赖注入)的概念也彻底地改变了旧的编程方式,让我们只需关注如何使用对象,而创建对象交给Spring去完成,即把使用对象和创建对象分 ...

  4. C与C++动态分配二维数组

    C: C中使用函数malloc和free两个函数. //动态分配M*N维 int **a=(int **)malloc(sizeof(int*)*M); ;i<M;i++) a[i]=(int ...

  5. windows2003 64位注册码 序列号 激活码

    Windows 2003 R2 64bit Enterprise VOL Edition 企业版 MR78C-GF2CY-KC864-DTG74-VMT73 VPT7T-77D38-KWVW2-2G3 ...

  6. Web服务器压力测试一例

    近期部门新上线一个服务,我们使用ab和locust分别测试 目前项目属于demo阶段,对访问量的支持不要求太高,我们暂且设定在500请求,20并发 工具介绍 ab ab全称为:Apache HTTP ...

  7. Android 自己定义 TextView drawableTop 图标与文字左对齐(效果图)

    public class DrawableTopLeftTextView extends TextView { private Paint mPaint; private float fFontHei ...

  8. linux系统关机与重新启动命令

    在linux下关机和重新启动系统有shutdown.halt.reboot.init,对于他们来说他们的内部工作过程是不同样的. 1.shutdown命令 使用它能够安全地关闭系统.然而在关闭系统时. ...

  9. Hibernate征途(二)之基础与核心

    根据我司优良传统,必然要由上向下.逐级深入,所以在钻到Hibernate细节之前,先从宏观上行欣赏一下Hibernate.为什么说是欣赏?大家可以自行查阅一下Hibernate知识外的信息,创始人和H ...

  10. 小心ThreadLocal的陷阱

    ThreadLocal用在多线程时保存线程级的局部变量,当我们需要在线程内共享数据时,ThreadLocal屡试不爽,但是ThreadLocal也会有一个问题,当你使用线程池时,线程可能会被重用,所以 ...