hdu 4614 Vases and Flowers

hdu4614 Vases and Flowers(简单线段树 + 二分) Vases and Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1336    Accepted Submission(s): 532 Problem Description   Alice i 阅读详情

这个题目其实不用二分应该能快点,感觉应该会写很多函数,很多种情况。

所以选择二分+线段树来实现起来简单点。

思路还算是比较简单的。

#include <iostream>
#include <cstdio>
#include <set>

using namespace std;
const int maxn = 100010;
int num[maxn<<2],mask[maxn<<2],ansl,ansr;

void pushdown(int l,int r,int rt)
{
    if (mask[rt] == 1)
    {
        mask[rt<<1] = 1;
        mask[rt<<1|1] = 1;
        int m = (l+r)>>1;
        num[rt<<1] = m-l+1;
        num[rt<<1|1] = r-m;
        mask[rt] = -1;
        //cout << "bug" << endl;
    } else if (mask[rt] == 0) {
        mask[rt<<1] = 0;
        mask[rt<<1|1] = 0;

        num[rt<<1] = 0;
        num[rt<<1|1] = 0;
        mask[rt] = -1;
    }
}

void pushup(int rt)
{
    num[rt] = num[rt<<1] + num[rt<<1|1];
}

int query(int L,int R,int type,int l,int r,int rt)
{
    if (L > R) return 0;
    if (L <= l && R >= r) {
        if (type == -1) return num[rt];
        if (type == 1) {
            int result = r - l + 1 - num[rt];
            num[rt] = r - l + 1;
            mask[rt] = 1;
            return result;
        }
        int result = num[rt];
        num[rt] = 0;
        mask[rt] = 0;
        return result;
    }
    int m = (l + r)>>1;
    pushdown(l,r,rt);
    int ret = 0;
    if (L <= m) ret += query(L,R,type,l,m,rt<<1);
    if (R > m)  ret += query(L,R,type,m+1,r,rt<<1|1);
    pushup(rt);
    return ret;
}
int binary_find(int cnt,int n)
{
    int l = 0 ,r = n - 1,ret = 0;
    while(l <= r)
    {
        int m = (l+r)>>1;
        int number = query(0,m,-1,0,n-1,1);
        if (number >= cnt) {
            ret = m;
            r = m - 1;
        } else l = m + 1;
    }
    return ret;
}
void solve(int start,int cnt,int n)
{
    int pre = query(0,start-1,-1,0,n-1,1);
    int behind = query(start,n-1,-1,0,n-1,1);
    //cout << pre << "  " << behind << endl;
    cnt = min(cnt,behind);
    if (cnt == 0) return;
    ansl = binary_find(pre+1,n);
    ansr = binary_find(pre + cnt,n);
    query(ansl,ansr,0,0,n-1,1);
}
int main()
{
    int T,n,m,K,A,B;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&n,&m);
        //线段树初始化
        num[1] = n;
        mask[1] = 1;

        while(m--)
        {
            scanf("%d %d %d",&K,&A,&B);
            if (K == 1) {
               ansl = ansr = -1;
               solve(A,B,n);
               if (ansl != -1) printf("%d %d\n",ansl,ansr);
               else puts("Can not put any one.");
            } else {
                printf("%d\n",query(A,B,1,0,n-1,1));
            }
        }
        puts("");
    }
    return 0;
}


SwinTransformer 改进:SSPCAB模块(2024最新改进方法) SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。 阅读详情

相关推荐

视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

文章目录视觉SLAM的组成结构视觉里程计(VO)-特征点法 -构建稀疏点云地图-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器视觉里程计--总结:SLAM 后端研究滤波器法非线性优化后端方式的差异(有五种优化方式):单目视觉里程计的初始化:运动估计:半直接法运动估计的优化方案:关于解决累计误差的一些方法:关键帧的建图及后端优化:特征的深度估计:图优化的后端研究:视觉与IMU融合的分类:视觉与IMU的融合的优势:存在的问题:优秀的开源: 视觉SLAM的组成结构 视觉里程计(VO) -特

DC 6811

hdu4614 Vases and Flowers 二分

hdu4614 Vases and Flowers 二分 这道题用数据结构为优化时间效率 用二分来分别找出左边界答案 和右边界答案 这是属于线段树数据结构与其他算法的结合使用 开始做的时候 还死死的在线段树上做文章。。。。 问题是 在以A为起点的区间 第一个可以插花的 和最后一个可以插花的地方 按照正常思路的话可以想到二分 可是与线段树扯上了 就只能想到在线段树上处理 看来这种结合思想

liyanfeng1996的博客 361

Android-S无线模块前瞻

WiFi - mainlane非强制 S 采用反射的方法直接加载wifiservice,直接hook在systemserver上,无编译依赖。gms可以动态替换wifi服务。 R 采用直接启动service的方式,wifiservice仍然map在systemserver上。 WiFi - 11ad接口支持 11ad被wifi联盟商业化为WIGIG,提供短距的60GHZ载波,理论速度为当前5G 11ac的6倍。市面上基本没有手机支持,需要独立的芯片支撑此功能。 传输距离为3m以内,外界d.

头铁的伦的博客 1042

hdu 4614 Vases and Flowers(线段树)

题目链接:hdu 4614 Vases and Flowers解题思路用线段树维护空位。代码#include <cstdio> #include <cstring> #include <algorithm>using namespace std; #define lson(x) (x<<1) #define rson(x) ((x<<1)|1) const int maxn = 50005;int

不慌不忙、不急不躁 645

电商产品组合策略:引流品与利润品的实战方法论

在电商运营中,产品组合策略是提升流量转化与利润增长的核心技术。其基本原理是通过数据化选品构建产品矩阵,利用引流品吸引用户流量,再通过利润品实现商业变现。这种策略不仅能优化广告投放的ROAS(广告投入产出比),还能显著提升客单价。技术实现上需要结合Google Analytics等工具进行归因分析,并运用动态库存管理模型控制风险。该方案特别适用于Amazon、Shopify等电商平台,能有效解决跨境电商业内流量获取与利润创造的平衡难题。通过实战案例可见,合理的产品组合可使客单价提升30-50%,是电商运营必备

weixin_42522009的博客 350

MIKE21桥墩模拟实战:抠网格与构筑物法对比与选型指南

本文详细对比了MIKE21软件中抠网格法与构筑物法在桥墩模拟中的应用,包括操作步骤、适用场景及优缺点分析。通过实际案例数据展示两种方法的精度与效率差异,并提供选型决策树和常见问题解决方案,帮助工程师根据项目需求选择最优模拟方法。

weixin_42656416的博客 322

HDU - 4614 Vases and Flowers

HDU - 4614 Vases and Flowers 题 意:小明有n个花瓶,可以进行m次两种操作,1 A F。小明收到F朵花,尝试从第A个开始插花。从A一直到….N,如果还有花剩下就丢弃。2 X Y:清空[x,y]种的花瓶,如果花瓶有花,则丢弃。对于询问1 每次输出最左边的端点和右边的端点。对于询问2每次 每次输出清空的区间内,有多少朵花。如果一朵花都不能插,就打印Can not pu...

子灬丶逾 193

史上最小白之RNN详解

1.前言 网上目前已经有诸多优秀的RNN相关博客,但是我写博客的出发点主要是为了加深和巩固自己的理解,所以还是决定自己再进行一下总结和描述,如有不正确的地方欢迎指正~ 2.区分RNN 循环神经网络(Recurrent Neural Network),递归神经网络(Recursive Neural Network),你有没有发现他们的缩写都是RNN,那他们两个是同一回事儿吗?网上有一些博客把这两就当...

Tink1995的博客 4万+

HDU 4614 Vases and Flowers

HDU 4614 Vases and Flowers线段树题意两个数n,m, n表示花瓶数量0~n-1,开始全为空。接下来有m组,每组有数k,a,b;当k=1时, 从a位置开始插花,b为花数量,当花瓶有花时,跳过当前,直到找到空花瓶再插入,输出插入第一支花的位置和最后一支花的位置,花可以没插完,当一支都没有插入则输出Can not put any one.;当k=2时,清空【a,b】的花瓶,并输出在

P.H.S 293

Cesium+Vue3教程(003):基于Vue3的Cesium自定义地图和地图叠加

在 Cesium 中,是用于加载地表影像图层的核心接口。通过它,您可以将各种地图服务(如卫星影像、街道地图、自定义瓦片等)加载到 Cesium 的地球上。Cesium 提供了多个内置的。

WwLK123的博客 633

【LaTex】3.4 立体几何

本文介绍了使用LaTeX的tikz包绘制立体几何图形的两种方法。首先展示了基础立方体的绘制代码,通过定义8个顶点坐标并连接各边完成绘制。接着讲解了scope功能在3D绘图中的应用,包括标准平面(xy、xz、yz)的绘制方法,以及任意平面的定义技巧。重点说明了如何通过定义平面原点、x和y方向单位向量来创建旋转后的绘图平面,并以45°旋转的yz平面为例演示了圆的绘制。文章提供了完整的代码示例和对应的效果图示,展示了tikz在3D绘图中的灵活性和强大功能。

你的指尖有改变世界的力量 2453

hdu4614——Vases and Flowers

Alice is so popular that she can receive many flowers everyday. She has N vases numbered from 0 to N-1. When she receive some flowers, she will try to put them in the vases, one flower in one vase. Sh...

vocaloid01的博客 270

全志F1C100S/F1C200S学习笔记(11)——spi-flash 启动全流程适配烧录及踩坑指南

SPI Flash 系统编译 spi-flash 启动适配 分区规划: 分区序号 分区大小 分区作用 地址空间及分区名 mtd0 1MB (0x100000) spl+uboot 0x0000000-0x0100000 : “uboot” mtd1 64KB (0x10000) dtb文件 0x0100000-0x0110000 : “dtb” mtd2 4MB (0x400000) linux内核 0x0110000-0x0510000 : “kernel” mtd3 剩余 (

丨晋丨 1万+

HDU 4614 Vases and Flowers 解题报告

题目 题意:一开始有标号为0~N-1的N个空花瓶,进行两种操作 操作1:A F,从标号为A的花瓶开始往后面放F朵花,如果当前花瓶有花了,就继续往后放,如果有花没有地方放了就丢掉。输出第一朵花和最后一朵花放的花瓶标号 操作2:A B,将花瓶A~B全部清空,并输出多少个花瓶被清空。 解法: 利用线段树的区间更新区间查询,线段树存储区间内有多少不为空的花瓶 对于操作1,先在[A,N-1]二分

Tri_integral的专栏 1287

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

hdu4614Vases and Flowers 线段树

//给一个数组,两个操作 //1 A F 以A为起点的F个空闲空间插花,输出起点和终点 //2 L R 将[L , R]的所有的有花的花拔除,问清除了几朵花 //用线段树维护剩余空间的个数 //然后再在查询时找出空间 #include #include #include using namespace std ; const int maxn = 50010 ; #define

ijbuhv的专栏 901

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Vases and Flowers HDU - 4614

思路 线段树维护区间空瓶的数量,然后每次放花二分位置得到左右端点的位置. 代码 #include<map> #include<set> #include<cmath> #include<stack> #include<queue> #include<cstdio> #include<string> #include...

qq_43638337的博客 195

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HDU-4614 Vases and Flowers

线段树保存区间空位数,区间最左空位和区间最右空位放入花时从A点到n点从左到右查询空位,并记录最左和最右的空位,最后统一将最左到最右更新为没有空位查询时用位置总数前去空位数就是花的个数,并且将区间更新为全为空位#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt...

wl16wzl的博客 238

B - Vases and Flowers HDU - 4614 (线段树+二分)

马上就要参加湘潭邀请赛了,今天刷了一套进阶的线段树来复习复习线段树。希望能拿到牌子~~ 日常专题之进阶线段树 专题链接: https://cn.vjudge.net/contest/300370#overview A题考虑区间乘,有点难,看别人题解,光pushdown就写了近80行代码。先放弃了 看B题: Vases and Flowers Time Limit: 4000/2000...

ccsu_deer 617

hdu4614 : Vases and Flowers

线段树

weixin_46266058的博客 554

hdu4614 Vases and Flowers

题意: AliceAliceAlice有nnn个花瓶,编号从0∼n0\sim n0∼n。每个花瓶可以插一朵花,每当他收到FFF朵花时,她将随机选择一个编号为AAA的花瓶,从这个花瓶开始往后到第n−1n-1n−1个花瓶,每当花瓶没有花时,可以将一朵花插在这个花瓶上。(当A∼n−1A\sim n-1A∼n−1的花瓶都插满花了但是F朵花没有插完,也会停止)。 操作1:选择编号为A的花瓶,插入F朵花,当一...

solego’s blog 241
上一篇: Ubuntu10.04下C连接mysql数据库
下一篇: git 的使用
struggle_mind
博客等级 码龄15年 39粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值