P3613 【深基15.例2】寄包柜

点个赞吧求求了 QAQ!!!

题目描述 超市有 n 个寄包柜(1 ≤ n ≤ 10⁵),每个寄包柜 i 有 aᵢ 个格子(0 ≤ aᵢ ≤ 10⁵,aᵢ 确定但未知),格子编号从 1 到 aᵢ。需处理 q 次操作(1 ≤ q ≤ 10⁵),操作分为两种: 1 i j k:在第 i 个柜子的第 j 个格子存入物品 k(0 ≤ k ≤ 10⁹);若 k=0,则清空该格子。 2 i j:查询第 i 个柜子的第 j 个格子中的物品(题目保证查询的格子有存过东西)。

补充说明: 所有寄包柜的总格子数不超过 10⁷; aᵢ 不小于该柜子被操作过的最大格子编号(不会操作不存在的格子); 部分寄包柜可能无任何格子(aᵢ=0)。

输入格式

第一行:两个整数 n 和 q,分别表示寄包柜个数和操作次数; 接下来 q 行:每行若干整数,对应一次操作(操作 1 含 4 个整数,操作 2 含 3 个整数)。

输出格式 对每次查询操作(操作 2),输出对应格子的物品值,每个结果单独占一行。

输入输出样例

输入 plaintext 5 4 1 3 10000 118014 1 1 1 1 2 3 10000 2 1 1

输出 plaintext 118014 1

cpp 复制代码
// 引入C++标准库头文件,满足基础输入输出、容器等功能需求
#include<algorithm>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<vector>  // 引入vector容器头文件,用于存储操作记录
using namespace std;

// 定义结构体st,用于存储单次操作的核心信息
struct st
{
    int j;  // 寄包柜编号
    int g;  // 柜子内的格子编号
    int k;  // 格子中存入的物品值(k=0表示清空)
};

int main()
{
    vector<st> v;  // 用vector存储所有操作记录,按操作顺序保存
    int n,q;       // n:寄包柜总数  q:操作次数
    cin>>n>>q;     // 输入寄包柜数量和操作次数
    
    // 遍历处理每一次操作
    for(int i=1;i<=q;i++)
    {
        int a,b,c,d;  // a:操作类型(1=存入/清空,2=查询);b:柜子编号;c:格子编号;d:物品值
        cin>>a>>b>>c>>d;
        
        // 操作1:存入/清空物品,记录操作到vector中
        if(a==1)
        {
            st s;          // 创建单次操作的结构体对象
            s.j=b;         // 赋值:操作的柜子编号
            s.g=c;         // 赋值:操作的格子编号
            s.k=d;         // 赋值:存入的物品值(0为清空)
            v.push_back(s);// 将本次操作添加到vector末尾
        }
        // 操作2:查询指定柜子+格子的物品值
        else
        {
            int res = 0;   // 查询结果默认值(未找到操作时为0,对应清空状态)
            // 从后往前遍历操作记录,找最后一次对该柜子+格子的操作(保证结果最新)
            for(int idx=v.size()-1;idx>=0;idx--)
            {
                // 匹配目标柜子和格子编号
                if(b == v[idx].j && c == v[idx].g)
                {
                    res = v[idx].k;  // 找到最新操作,记录物品值
                    break;           // 找到后立即退出循环,无需继续遍历
                }
            }
            cout << res << endl;  // 输出查询结果
        }
    }
    return 0;  // 程序正常结束
}
相关推荐
致Great3 小时前
科研人的 AI,不该只回答问题:我用字节TraeWork 跑了一遍真实研究任务
算法
纵有疾風起3 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt
测试_AI_一辰4 小时前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程
lucas_AI4 小时前
给YOLO检测器插 LoRA,'插对地方'比'插什么'更要命
人工智能·算法
LuminousCPP4 小时前
数据结构-时间与复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
c语言·数据结构·经验分享·算法·leetcode
Nil2084 小时前
leetcode 三数之和
数据结构·算法·leetcode
小小龙学IT5 小时前
C++ std::vector 底层实现深度解析:内存布局、扩容策略、移动语义与迭代器失效
开发语言·c++·算法
noipp5 小时前
推荐题目:洛谷 P16689 出征
java·开发语言·数据结构·c++·算法·洛谷·luogu
eBest数字化转型方案5 小时前
从工程视角拆解冰柜资产管理:拍照识别 pipeline、纯净度算法与 IoT 选型踩坑
人工智能·物联网·算法
Interview Aid1125 小时前
Roblox OA 面经|小游戏+编程双修,Coding 两题满分通过
算法