1-n线段 m个操作

1  a

是否可找到连续a个空位子 有输出最左边(然后使这一段被占)没有0

2 a ,b

a~b区间变成未使用

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; #define MAXN 50010 struct node
{
int l,r,lsum,rsum,msum,la;
}x[MAXN<<];
void Build(int l,int r,int a)
{
x[a].l=l;
x[a].r=r;
x[a].lsum=x[a].rsum=x[a].msum=r-l+;
x[a].la=-;
if(l==r)
return ;
int mid=(l+r)>>;
Build(l,mid,a<<);
Build(mid+,r,a<<|);
}
void push_down(int a)
{
int ll=x[a<<].r-x[a<<].l+;
int rr=x[a<<|].r-x[a<<|].l+;
x[a<<].la=x[a<<|].la=x[a].la;
x[a<<].rsum=x[a<<].lsum=x[a<<].msum=x[a].la?:ll;
x[a<<|].rsum=x[a<<|].lsum=x[a<<|].msum=x[a].la?:rr;
x[a].la=-;
}
void push_up(int a)
{
int ll=x[a<<].r-x[a<<].l+;
int rr=x[a<<|].r-x[a<<|].l+;
x[a].lsum=x[a<<].lsum;
if(x[a].lsum==ll)//区间合并
x[a].lsum+=x[a<<|].lsum;
x[a].rsum=x[a<<|].rsum;
if(x[a].rsum==rr)
x[a].rsum+=x[a<<].rsum;
x[a].msum=max(max(x[a<<].msum,x[a<<|].msum),x[a<<].rsum+x[a<<|].lsum);
} void update(int l,int r,int a1,int b1,int w,int a)
{
if(a1<=l&&r<=b1)
{
x[a].lsum=x[a].rsum=x[a].msum=w?:(r-l+);
x[a].la=w;
return ;
}
int mid=(l+r)>>;
if(x[a].la!=-)
push_down(a);
if(a1<=mid)
update(l,mid,a1,b1,w,a<<);
if(b1>mid)
update(mid+,r,a1,b1,w,a<<|);
push_up(a);
}
int Ques(int l,int r,int w,int a)
{
if(l==r)
return l;
if(x[a].la!=-)
push_down(a);
int mid=(l+r)>>;
if(x[a<<].msum>=w)//左孩子最大连续区间够了
return Ques(l,mid,w,a<<);
else if(x[a<<].rsum+x[a<<|].lsum>=w)//中间连续够了
return mid-x[a<<].rsum+;
return Ques(mid+,r,w,a<<|); //右边
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
Build(,n,);
while(m--)
{
int op,a,b;
scanf("%d",&op);
if(op==)
{
scanf("%d",&a);
if(x[].msum<a)//最大的
printf("0\n");
else
{
int p=Ques(,n,a,);
printf("%d\n",p);
update(,n,p,p+a-,,);//变成使用
}
}
else
{
scanf("%d%d",&a,&b);
update(,n,a,a+b-,,);//变成未使用
}
}
return ;
}

线段树 poj 3667的更多相关文章

  1. 离散化+线段树 POJ 3277 City Horizon

    POJ 3277 City Horizon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18466 Accepted: 507 ...

  2. 线段树 poj 1436

    题目大意:给出n条垂直于x轴的线段的数据y1,y2,x,求出有几个三条线段一组的三元组并且他们兩兩能相见的.思路:对y轴建树,将x排序,然后按顺序边询问边擦入,用mark[i][j]表示j往左可以看到 ...

  3. [RMQ] [线段树] POJ 3368 Frequent Values

    一句话,多次查询区间的众数的次数 注意多组数据!!!! RMQ方法: 预处理 i 及其之前相同的数的个数 再倒着预处理出 i 到不是与 a[i] 相等的位置之前的一个位置, 查询时分成相同的一段和不同 ...

  4. 线段树 poj 3468

    Description You have N integers, A1, A2, ... ,AN. You need to deal with two kinds of operations. One ...

  5. 线段树 poj 2991

    我们只要把这些向量求和,最终所指的位置就是终点,因此我们只要维护好向量的区间和就可以了.对于第二个问题,我们可以用一个数组degree[i]表示第i个向量和第i-1一个向量当前的夹角,这样就有了当前的 ...

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

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

  7. poj 3667 Hotel (线段树)

    http://poj.org/problem?id=3667 Hotel Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 94 ...

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

    http://poj.org/problem?id=3667 题意: 有N个房间,M次操作.有两种操作(1)"1a",表示找到连续的长度为a的空房间,如果有多解,优先左边的,即表示 ...

  9. POJ 3667 Hotel(线段树)

    POJ 3667 Hotel 题目链接 题意:有n个房间,如今有两个操作 1.找到连续长度a的空房间.入住,要尽量靠左边,假设有输出最左边的房间标号,假设没有输出0 2.清空[a, a + b - 1 ...

随机推荐

  1. eclipse启动的时候报错 出现Java was started but returned exit code=13

    eclipse启动的时候出现 这是你的jdk环境与你eclipse版本不匹配, 如果你的eclipse是32位的 jdk也得是32位的   重新安装一个比配的jdk就好了 如果你的jdk是解压版的   ...

  2. IOS开发基础知识--碎片42

    1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...

  3. 了解HTML CSS布局(层叠样式表)

    CSS全称为"层叠样式表(Cascading Style Sheets)", 它主要是用于定义HTML内容在浏览器内显示的样式, 比如文字, 颜色, 视觉上的静态效果, 布局等等. ...

  4. RHEL6 64位系统安装ORACLE 10g 64bit 数据库

    记得去年4月份的时候,为公司部署测试环境和UAT环境时,在红帽RHEL6 64位系统安装ORACLE 10g 64位数据库时遇到了许多小问题,当时匆匆忙忙也没记录一下这些问题,前几天在虚拟机安装ORA ...

  5. .NET应用架构设计—面向对象分析与设计四色原型模式(彩色建模、领域无关模型)(概念版)

    阅读目录: 1.背景介绍 2.问自己,UML对你来说有意义吗?它帮助过你对系统进行分析.建模吗? 3.一直以来其实我们被一个缝隙隔开了,使我们对OOAD遥不可及 4.四色原型模式填补这个历史缝隙,让我 ...

  6. MongoDB学习笔记~环境搭建

    回到目录 Redis学习笔记已经告一段落,Redis仓储也已经实现了,对于key/value结构的redis我更愿意使用它来实现数据集的缓存机制,而对于结构灵活,查询效率高的时候使用redis就有点不 ...

  7. jar命令的用法详解

    本文详细讲述了JAR命令的用法,对于大家学习和总结jar命令的使用有一定的帮助作用.具体如下: JAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有区别的,JAR包中 ...

  8. HTML基本组成结构与标签的认识

    HTML基本组成结构与标签 其实组成结构用一张图来简单了解下如下 目前一般网站的结构是会如此不是很清晰简单 先来说说header头部 这样是不是更加清楚了 导航栏是引导用户查看网站内容的快捷入口,打个 ...

  9. linux yum 工具

    vim /etc/yum.repos.d/CentOS-Base.repo 编辑yum 源网址 yum list |grep vim查看vim 情况 yum remove 卸载rpm包 # yum u ...

  10. 【原】如何改变表单元素的外观(for Webkit and IE10)

    表单元素在网页设计中使用的非常频繁,如文本输入框.单选框.复选框.选择列表.上传文件,它们在浏览器中的展现有自带的外观,为了在视觉上取得更好的产品体验,保持客户端的统一,通常产品经理会提出需要改变它的 ...