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;  // 程序正常结束
}
相关推荐
skywalker_112 分钟前
力扣hot100-3(最长连续序列),4(移动零)
数据结构·算法·leetcode
6Hzlia3 分钟前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
wfbcg29 分钟前
每日算法练习:LeetCode 209. 长度最小的子数组 ✅
算法·leetcode·职场和发展
_日拱一卒39 分钟前
LeetCode:除了自身以外数组的乘积
数据结构·算法·leetcode
计算机安禾44 分钟前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
SatVision炼金士1 小时前
合成孔径雷达干涉测量(InSAR)沉降监测算法体系
算法
wuweijianlove1 小时前
算法稳定性与数值误差传播研究的技术2
算法
计算机安禾1 小时前
【数据结构与算法】第35篇:归并排序与基数排序
c语言·数据结构·vscode·算法·排序算法·哈希算法·visual studio
爱码小白1 小时前
MySQL 单表查询练习题汇总
数据库·python·算法
橘颂TA1 小时前
【笔试】算法的暴力美学——牛客 NC213140 :除2!
c++·算法·结构与算法