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;  // 程序正常结束
}
相关推荐
lihihi9 分钟前
P1209 [USACO1.3] 修理牛棚 Barn Repair
算法
weixin_3875342228 分钟前
Ownership - Rust Hardcore Head to Toe
开发语言·后端·算法·rust
庞轩px34 分钟前
MinorGC的完整流程与复制算法深度解析
java·jvm·算法·性能优化
Queenie_Charlie40 分钟前
Manacher算法
c++·算法·manacher
闻缺陷则喜何志丹41 分钟前
【树的直径 离散化】 P7807 魔力滋生|普及+
c++·算法·洛谷·离散化·树的直径
AI_Ming1 小时前
Seq2Seq-大模型知识点(程序员转行AI大模型学习)
算法·ai编程
若水不如远方1 小时前
分布式一致性(六):拥抱可用性 —— 最终一致性与 Gossip 协议
分布式·后端·算法
计算机安禾1 小时前
【C语言程序设计】第35篇:文件的打开、关闭与读写操作
c语言·开发语言·c++·vscode·算法·visual studio code·visual studio
Wect1 小时前
React Hooks 核心原理
前端·算法·typescript
美式请加冰1 小时前
字符串的介绍和使用
算法