题意 给出一排空花瓶 有两种操作  1是 从A花瓶开始放F朵花 如果当前瓶有花就跳过前往下一个 直到花用完或者 瓶子到了最后一个为止 输出 成功放花的第一个和最后一个  如果没有输出 can not.......

2是 清空 一段区间的花 并输出清空了多少朵花

思路:用线段树维护一段区间有多少空花瓶  1操作 就是两次二分 分别求起点和终点   起点  check条件是  query(1,a,mid)>0  终点是  query(1,二分出的起点,mid)>=min(f,query(1,a,n-1)) 这里min是因为有可能总共就没有那么多空瓶子 而二分要求的是最后一个放的空瓶子 如果不min 一旦不够每次 二分出的都是n-1就不符合题意了

还有就是吐槽一下vj爬网页爬出 [pre]到输出了 我说怎么会有那么奇葩的输出 。。。

 #include<bits/stdc++.h>
using namespace std;
const int maxn=+;
int n;
struct Node{
int l,r;
long long sum;
int flag=-;
void update(int value){
if(value==){
sum=r-l+;
flag=;
}else if(value==){
sum=;
flag=;
}
}
}tree[maxn*];
void push_up(int x){
tree[x].sum=tree[x<<].sum+tree[x<<|].sum;
}
void push_down(int x){
if(tree[x].flag==){
tree[x<<].sum=tree[x<<].r-tree[x<<].l+;
tree[x<<|].sum=tree[x<<|].r-tree[x<<|].l+;
tree[x<<|].flag=tree[x<<].flag=;
tree[x].flag=-;
}
else if(tree[x].flag==){
tree[x<<].sum=;
tree[x<<|].sum=;
tree[x<<|].flag=tree[x<<].flag=;
tree[x].flag=-;
}
}
void update(int x,int l,int r,int value){
if(tree[x].l>=l&&tree[x].r<=r){
tree[x].update(value);
return ;
}
int mid=tree[x].l+tree[x].r>>;
push_down(x);
if(mid>=l)update(x<<,l,r,value);
if(mid<r)update(x<<|,l,r,value);
push_up(x);
}
int query(int x,int l,int r){
if(tree[x].l>=l&&tree[x].r<=r){
return tree[x].sum; }
int mid=tree[x].l+tree[x].r>>;
push_down(x);
long long ans=;
if(mid>=l)ans+=query(x<<,l,r);
if(mid<r)ans+=query(x<<|,l,r);
return ans;
}
void build(int x,int l,int r){
tree[x].l=l,tree[x].r=r;
tree[x].sum=r-l+;
tree[x].flag=-;
if(l==r)return ;
int mid=l+r>>;
build(x<<,l,mid);
build(x<<|,mid+,r);
}
void work(int a,int f){
int l=a,r=n-;
int ans1=-;
int temp=query(,a,n-);
if(temp==){
printf("Can not put any one.\n");
return ;
}
while(l<=r){
int mid=l+r>>;
if(query(,a,mid)!=){
ans1=mid;
r=mid-;
}
else l=mid+;
}
l=ans1,r=n-;
int ans2=-;
f=min(f,temp);
while(l<=r){
int mid=l+r>>;
if(query(,ans1,mid)>=f){
ans2=mid;
r=mid-;
}
else l=mid+;
}
printf("%d %d\n",ans1,ans2);
update(,ans1,ans2,);
}
int main(){
int t ,m;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
build(,,n-);
int a,b,c;
while(m--){
scanf("%d%d%d",&a,&b,&c);
if(a==){
work(b,c);
}
if(a==){ printf("%d\n",c-b+-query(,b,c));
update(,b,c,);
}
}
printf("\n"); }
return ;
}

L - Vases and Flowers HDU - 4614 线段树+二分的更多相关文章

  1. L - Vases and Flowers - hdu 4614(区间操作)

    题意:有两种操作,第一种从A开始插花,如果有花就跳到下一个,然后输出最后一个花瓶的编号,如果花瓶不够把多余的花丢掉.操作2把区间清空 分析:很明显的线段树操作,就是插花的时候麻烦一下,需要先找出来他剩 ...

  2. HDU 4614 线段树+二分查找

    Vases and Flowers 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4614 Problem Description Alice is s ...

  3. G - Queue HDU - 5493 线段树+二分

    G - Queue HDU - 5493 题目大意:给你n个人的身高和这个人前面或者后面有多少个比他高的人,让你还原这个序列,按字典序输出. 题解: 首先按高度排序. 设每个人在其前面有k个人,设比这 ...

  4. hdu 4614 线段树

    思路:当k为1的时候,用二分法查询包含有f个空瓶的上界r,然后更新会方便很多,直接更新区间(a,r)了. #include<iostream> #include<cstdio> ...

  5. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  6. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  8. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  9. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

随机推荐

  1. python中filter(),reduce()函数

    filter()函数 是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 和一个list,这个函数的作用是对每个元素进行判断,返回 True或 False,filter() ...

  2. 利用tushare进行对兴业银行股价的爬取,并使用numpy进行分析

    import sysimport tushare as tsimport numpy as npdata=ts.get_h_data('601066')print(data)#读出兴业银行7列数据da ...

  3. Day15 Python基础之logging模块(十三)

    参考源:http://www.cnblogs.com/yuanchenqi/articles/5732581.html logging模块 (****重点***) 一 (简单应用) import lo ...

  4. 运行Maven项目时出现invalid LOC header (bad signature)错误,Tomcat不能正常启动

    作为Maven小白,今天这问题困扰了我好久,经过多次在网上查询,终于找到了原因.明明一个小问题却耗费很多时间,着实不应该,所以必须记录一下. 报错信息如下: 对话框: 控制台: <span st ...

  5. Python之缩进块

    pycharm编辑器识别冒号,当换行后下一行默认是缩进块的位置:

  6. nginx配置ssl证书后无法访问https

    一直听说https更安全,要安装证书,一直没试过,今天终于试了试 首先得有个http的域名网站,服务器. 到阿里云的安全-ssl证书管理申请一个免费的,可以绑定一个域名  然后完善资料,照着例子配置一 ...

  7. 【转帖】Linux定时任务Crontab命令详解

    Linux定时任务Crontab命令详解 https://www.cnblogs.com/intval/p/5763929.html 知道有crontab 以及 at 命令 改天仔细学习一下 讲sys ...

  8. laravel 项目表单中有csrf_token,但一直报错419错误 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persi

    laravel 项目表单中有csrf_token,但一直报错419错误,因为项目中使用到Redis缓存,在强制关闭Redis后出现的问题,查询laravel.log文件查找相关问题 安装redis后在 ...

  9. 基于vue-cli,sass,vant的移动端项目

    项目架构 开始 vue init webpack    项目名称         //新建项目,cd进入新项目 npm install axios                    //先安装! ...

  10. python之路--线程的其他方法

    一 . current_thread的用法 import threading import time from threading import Thread, current_thread def ...