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;  // 程序正常结束
}
相关推荐
CoderCodingNo2 小时前
【GESP】C++五级真题(数论-素数思想考点) luogu-P10720 [GESP202406 五级] 小杨的幸运数字
开发语言·c++·算法
小李小李快乐不已2 小时前
算法技巧理论基础
数据结构·c++·算法·leetcode·hot100
少许极端2 小时前
算法奇妙屋(二十一)-两个数组或字符串的dp问题(动态规划)
算法·动态规划·两个数组或字符串的dp问题
草莓熊Lotso2 小时前
《算法闯关指南:递归,搜索与回溯算法--递归》--04. 两两交换链表中的结点 ,05.Pow(x,n)
数据结构·算法·链表
Bruce_kaizy2 小时前
c++图论——最短路之Johnson算法
开发语言·数据结构·c++·算法·图论
蒙奇D索大2 小时前
【数据结构】排序算法精讲 | 交换排序全解:交换思想、效率对比与实战代码剖析
数据结构·笔记·考研·算法·排序算法·改行学it
sin_hielo2 小时前
leetcode 1351
数据结构·算法·leetcode
睡醒了叭2 小时前
图像分割-传统算法-边缘分割
图像处理·opencv·算法·计算机视觉
AndrewHZ2 小时前
【图像处理基石】有哪些好用的图像去噪算法可以推荐一下么?
图像处理·深度学习·算法·计算机视觉·cv·噪声