atcoder abc 382 lazy_tag线段树

news2024/12/5 9:39:26

A Daily Cookie

代码:
 

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
    int n, d;
    cin >> n >> d;
    string s;
    cin >> s;
    int cnt = d;
    for(auto t: s) if(t == '.') cnt ++;
    cout << min(n, cnt);
}

B Daily Cookie2

代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
    int n, d;
    cin >> n >> d;
    string s;
    cin >> s;
    reverse(s.begin(), s.end());
    for(int i = 0; i < n; i ++ ) {
      if(d && s[i] == '@') {
        d --;
        s[i] = '.';
      }
    }
    reverse(s.begin(), s.end());
    cout << s;
    return 0;
}


C Kaiten Sushi 

问题:

思路:容易得到:寿司会被第一个美食等级小于其本身美味程度的人吃掉,并且,如果后面人的美食等级如果大于前面那个人的美食等级,那么后面那个人将永远不会吃到寿司,因为他能吃的寿司,他前面的一定可以吃,并且他前面的人有对寿司的优先选择权。因此这道题就变成了先以第一个人为开头,维护出一个美食等级递减的序列,并对每一块寿司在这个序列上二分查找第一个小于其本身美味程度的人

#include <bits/stdc++.h>
using namespace std;

int main() {
  int n, m;
  cin >> n >> m;
  vector<int> a(n + 1), b(m + 1);
  for(int i = 1; i <= n; i ++ ) cin >> a[i];
  vector<pair<int, int>> c;
  c.push_back({a[1], 1});
  for(int i = 1; i <= n; i ++ ) if(a[i] < c.back().first) c.push_back({a[i], i});
  int tot = c.size() - 1;
  for(int i = 1; i <= m; i ++ ) cin >> b[i];
  for(int i = 1; i <= m; i ++ ) {
    int l = 0, r = tot;
    while(l < r) {
      int mid = l + r >> 1;
      if(c[mid].first <= b[i]) r = mid;
      else l = mid + 1;
    }
    if(c[l].first <= b[i]) cout << c[l].second << "\n";
    else cout << "-1\n";
  }
  return 0;
}

D keep distance

思路:对于每一个Ai,都有一个数据范围,并且这个范围的差值不超过10,因此考虑爆搜 + 剪枝

另外,取两种极端情况就可以得到这个范围 

区间左端点: 1, 1 + 10,1 + 10 + 10, 1 + (n - 1) * 10 

区间右端点  m - (n - 1) * 10, m - 10, m 

代码:
 

#include <bits/stdc++.h>
using namespace std;

int main() {
  int n, m;
  cin >> n >> m;
  vector<int> l(n + 1), r(n + 1);
  for(int i = 1; i <= n; i ++ ) {
      if(i == 1) l[i] = 1;
      else l[i] = l[i - 1] + 10;
  }
    

  int cnt = 0;
  for(int i = n; i >= 1; i -- ) {
      r[i] = m - cnt * 10;
      cnt ++;
  }
   
    //for(int i = 1; i <= n; i ++ ) cout << l[i] << " " << r[i] << "\n";
  vector<int> ans(n + 1);
  vector<vector<int>> res;
  function<void(int)> dfs = [&](int u) {
    if(u == n + 1) {
        for(int i = 2; i <= n; i ++ ) if(ans[i] - ans[i - 1] < 10) return;
        res.push_back(ans);
        return;
    }
    
    for(int i = l[u]; i <= r[u]; i ++ ) {
        ans[u] = i;
        if(u != 1 && i - ans[u - 1] < 10) continue;
        dfs(u + 1);
    }
  };
  
  dfs(1);
  cout << res.size() << "\n";
  for(auto t: res) {
      for(auto tt: t) {
          if(tt == 0) continue;
          cout << tt << " ";
      }
      cout << "\n";
  }
  return 0;
}
/*
10
1 11 21
1 11 22
1 11 23
1 12 22
1 12 23
1 13 23
2 12 22
2 12 23
2 13 23
3 13 23
*/

F falling bars

问题:

思路:首先翻译一下题意,大致题意就是一个个矩形区域在一个h * w的区域中自上向下掉落,当且仅当这个矩形下方无矩形时,这个矩形才可以向下掉落,并且不会超过边界。容易注意到这样一个性质,最开始靠下的矩形的掉落一定不会受到最开始比其高的矩形的影响,因为矩形下落速度都一样。那么可以把所给矩形按照高度排序,并自下而上按顺序加入区域中,把离线改成在线。现在考虑如何把矩形对矩形的影响表示出来,如果一个长为L的矩形下落,如果可以查询出这个区间范围内当前最高点,那么最高点 - 1就是该矩形的高度,并且该矩形最终会对他本身这个长度区间的最高点产生影响,也需要区间更新的操作,那么区间查询,区间更新,很明显,懒标记线段树

代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 10;

int h, w, n;
struct node {
    int l, r, val, tag;
}tr[4 * N];

void pushup(int u) {
    tr[u].val = min(tr[u << 1].val, tr[u << 1 | 1].val);
}

void pushdown(int u) {
    tr[u << 1].tag = min(tr[u << 1].tag, tr[u].tag);
    tr[u << 1 | 1].tag = min(tr[u << 1 | 1].tag, tr[u].tag);
    tr[u << 1].val = min(tr[u << 1].val, tr[u].tag);
    tr[u << 1 | 1].val = min(tr[u << 1 | 1].val, tr[u].tag);
    tr[u].tag = h + 1;
}

void build(int u, int l, int r) {
    tr[u].l = l, tr[u].r = r, tr[u].val = h + 1, tr[u].tag = h + 1;
    if(l == r) return;
    int mid = l + r >> 1;
    build(u << 1, l, mid);
    build(u << 1 | 1, mid + 1, r);
}

void modify(int u, int l, int r, int x) {
    if(tr[u].l >= l && tr[u].r <= r) {
        tr[u].val = min(tr[u].val, x);
        tr[u].tag = min(tr[u].tag, x);
    } else {
        int mid = tr[u].l + tr[u].r >> 1;
        pushdown(u);
        if(mid >= l) modify(u << 1, l, r, x);
        if(mid < r) modify(u << 1 | 1, l, r, x);
        pushup(u);
    }
}

int query(int u, int l, int r) {
    if(tr[u].l >= l && tr[u].r <= r) return tr[u].val;
    int mid = tr[u].l + tr[u].r >> 1;
    int res = h + 1;
    pushdown(u);
    if(mid >= l) res = min(res, query(u << 1, l, r));
    if(mid < r) res = min(res, query(u << 1 | 1, l, r));
    return res;
}

int main() {
    cin >> h >> w >> n;
    struct node {
        int x, y, len, id;
        bool operator < (const node &W) const {
            return x > W.x;
        }
    };
    
    build(1, 1, w);
    vector<node> a(n + 1);
    for(int i = 1; i <= n; i ++ ) cin >> a[i].x >> a[i].y >> a[i].len;
    for(int i = 1; i <= n; i ++ ) a[i].id = i;
    sort(a.begin() + 1, a.end());
    vector<int> ans(n + 1);
    for(int i = 1; i <= n; i ++ ) {
        int l = a[i].y, r = a[i].y + a[i].len - 1;
        int now = query(1, l, r);
        ans[a[i].id] = now - 1;
        modify(1, l, r, now - 1);
    }
    
    for(int i = 1; i <= n; i ++ ) cout << ans[i] << "\n";
    cout << "\n";
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NLP 8、normalization、sigmoid,softmax归一化函数】

"燃尽最后的本能&#xff0c;意志力会带你杀出重围" —— 24.12.2 1. Normalization&#xff08;归一化&#xff09; 归一化是将数据转换为具有统一尺度的形式&#xff0c;通常用于数据预处理阶段。常见的归一化方法包括 Min-Max归一化、Z-Score 归一化和 L…

深入学习指针(5)!!!!!!!!!!!!!!!

文章目录 1.回调函数是什么&#xff1f;2.qsort使用举例2.1使用qsort函数排序整形数据2.2使用sqort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递…

Matlab Simulink 电力电子仿真-单相电压型半桥逆变电路分析

目录 一、单相电压型半桥逆变电路仿真模型 1.电路模型 2.电路模型参数 二、仿真分析 三、总结 1.优缺点 2.应用场景 一、单相电压型半桥逆变电路仿真模型 1.电路模型 单相电压型半桥逆变电路是一种常见的逆变电路&#xff0c;主要用于将直流电源转换为交流电源。 &…

《Vue零基础入门教程》第十五课:样式绑定

往期内容 《Vue零基础入门教程》第六课&#xff1a;基本选项 《Vue零基础入门教程》第八课&#xff1a;模板语法 《Vue零基础入门教程》第九课&#xff1a;插值语法细节 《Vue零基础入门教程》第十课&#xff1a;属性绑定指令 《Vue零基础入门教程》第十一课&#xff1a;事…

做异端中的异端 -- Emacs裸奔之路5: 条件反射式移动

移动命令使用频率非常之高&#xff0c;只要方法多一个小小的弯路&#xff0c;对使用体验影响都很大。 克服移动上的难度&#xff0c;离掌握Emacs就不远了。 在不安装其它包的情况下&#xff0c;Emacs就可以&#xff1a; 以行为单位移动&#xff1a; C-n/C-p以段落为单位移动&…

基于单片机的WIFI、语音、储存、时钟、闹钟、定位系统

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS1302时钟模块&#xff0c;通过LCD1602显示实时时间&#xff0c;也可以储存时间在AT2DC02中&#xff0c…

【阅读记录-章节4】Build a Large Language Model (From Scratch)

文章目录 4. Implementing a GPT model from scratch to generate text4.1 Coding an LLM architecture4.1.1 配置小型 GPT-2 模型4.1.2 DummyGPTModel代码示例4.1.3 准备输入数据并初始化 GPT 模型4.1.4 初始化并运行 GPT 模型 4.2 Normalizing activations with layer normal…

[创业之路-158]:《BLM战略规划》BLM业务业务领先模型与从战略到执行-模型(DSTE)

目录 一、BLM业务业务领先模型 - 整体框架 1.1 战略制定 1.2 战略执行 二、战略领导力&#xff1a;洞察&#xff08;看的远、看得深&#xff09;、决断&#xff08;看得清&#xff09;、执行力&#xff08;做得快、做得好&#xff09; 2.1 基本框架&#xff1a;战略制定、…

配置 Android Studio cursor/vscode 环境(切换 Flutter 版本)

系统环境变量 Path Android Studio 配置 Java 系统变量 Path PS&#xff1a;

Qt几何数据类型:QPoint类型详解(基础向)

目录 QPoint类 QPoint的构造 QPoint公有方法 isNull() rx() ry() setX() setY() toCGPoint() toPointF() transposed() x() y() manhattanLength() 各类重载运算符 QPoint的静态方法 dotproduct() QPoint类 在 Qt 框架中&#xff0c;QPoint 是一个简单且常用的类&…

外卖开发(三)开发笔记——AOP实现实现公共字段填充、主键回显、抛异常和事务管理

外卖开发&#xff08;三&#xff09;开发笔记 一、AOP实现实现公共字段填充&#xff08;减少重复工作&#xff09;实现思路自定义注解AutoFill自定义切面AutoFillAspect在Mapper接口上添加AutoFill注解 二、主键回显情况三、抛异常 和 事务管理 一、AOP实现实现公共字段填充&am…

Flutter 1.2:flutter配置gradle环境

1、在android的模块中进行gradle环境配置 ①在 gradle-wrapper.properties文件中将url配置为阿里云镜像&#xff0c;因为gradle的服务器在国外&#xff0c;国内下载非常慢&#xff0c;也可在官网进行下载 gradle版本下载 gradle版本匹配 阿里云镜像gradle下载 可以通过复制链…

神经网络入门实战:(九)分类问题 → 神经网络模型搭建模版和训练四步曲

(一) 神经网络模型搭建官方文档 每一层基本都有权重和偏置&#xff0c;可以仔细看官方文档。 pytorch 官网的库&#xff1a;torch.nn — PyTorch 2.5 documentation Containers库&#xff1a;用来搭建神经网络框架&#xff08;包含所有的神经网络的框架&#xff09;&#xff1b…

达梦数据库文件故障的恢复方法

目录 1、概述 1.1 概述 1.2 环境介绍 2、使用备份集的恢复方法 2.1 实验准备 2.2 误删除“用户表空间数据文件” 2.3 误删除SYSTEM.DBF 2.4 误删除ROLL.DBF 2.5 REDO日志文件 3、无备份集的恢复方法 3.1 误删除“表空间数据文件” 3.2误删除控制文件 3.3 误删除RO…

uniapp进阶技巧:如何优雅地封装request实例

在uniapp开发过程中&#xff0c;合理封装网络请求是提高代码质量和开发效率的关键。本文将介绍一种更为优雅的封装方式&#xff0c;通过创建一个request实例来管理不同类型的HTTP请求。 一、准备工作 在开始封装之前&#xff0c;请确保你的项目中已经安装了uniapp开发环境&…

45 基于单片机的信号选择与温度变化

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DS18B20检测温度&#xff0c;通过三种LED灯代表不同状态。 采用DAC0832显示信号脉冲&#xff0c;通过8位数码管显示温度。 信号脉冲可以根据两个按键分别调整为正弦…

yagmail邮件发送库:如何用Python实现自动化邮件营销?

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

付费版-多媒体云转码视频处理工具-付费系统完整源码搭建-先到先得-本文带完整搭建步骤-优雅草央千澈

付费版-多媒体云转码视频处理工具-付费系统完整源码搭建-先到先得-本文带完整搭建步骤-优雅草央千澈 环境 linuxnginxphp7.1mysql5.6 安装步骤 以下适用于宝塔已经安装好的情况 1.上传源码到你的网站目录 2.访问你的域名&#xff0c;按操作提示进行安装配置&#xff08;如…

java基础概念46-数据结构1

一、引入 List集合的三种实现类使用了不同的数据结构&#xff01; 二、数据结构的定义 三、常见的数据结构 3-1、栈 特点&#xff1a;先进后出&#xff0c;后进先出。 java内存容器&#xff1a; 3-2、队列 特点&#xff1a;先进先出、后进后出。 栈VS队列-小结 3-3、数组 3-…

朗迪锋亮相2024人因工程与智能系统交互国际会议

2024年11月28日至30日&#xff0c;2024人因工程与智能系统交互国际会议在深圳隆重举办。此次大会以推动我国人因工程学科发展为目标&#xff0c;致力于加强国际学术交流&#xff0c;深入探讨人工智能时代的智能系统交互&#xff0c;旨在培育新质生产力&#xff0c;助力经济社会…