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;  // 程序正常结束
}
相关推荐
小白羊丨7 小时前
如何诊断 Prompt 模板导致的效果下降?
人工智能·算法·prompt
OPEN-F8 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
lisin-lee-cooper9 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法
sunburn-9 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法
智碳能碳管理平台9 小时前
工业能耗台账标准化:能碳管理系统的数据口径怎么设计
算法·能碳管理系统·智碳能碳管理平台·企业能碳管理系统·碳排放核算软件·绿色工厂申报saas·能碳管理平台
带多刺的玫瑰10 小时前
Leecode#15刷题之三数之和
算法·leetcode·职场和发展
哭泣方源炼蛊10 小时前
并查集进阶 P1(带权并查集,并查集分类)
数据结构·c++·算法·二进制·带权并查集
牧羊人.33310 小时前
动手学深度学习 02 | 手写数字识别
图像处理·人工智能·深度学习·算法
武帝为此11 小时前
【InnoDB存储引擎介绍】
数据库·算法
shehuiyuelaiyuehao11 小时前
算法32,连续数组,前缀和+哈希表
算法·leetcode·职场和发展