P8843 [传智杯 #4 初赛] 萝卜数据库 ---- 嵌套数组
题目描述
花栗鼠很喜欢偷吃生产队的大萝卜,因此花栗鼠科技大学正在研究一种新型的数据库,叫做萝卜数据库。
具体来说,它支持 k(1 \leq k \leq 100)k(1≤k≤100) 个字段,每个字段名都是整数,里面存储的数值也都是整数。
现在你支持如下操作:
-
向数据库中插入一个记录,它可能只会包含 kk 个字段的某一部分。具体的操作格式详见“输入格式”。
-
在数据库中查询有多少条符合条件的记录。
现在你总共有 nn 次操作(1 \;\leq n \leq 10001≤n≤1000),请你对每个回答操作,输出结果。
输入格式
第一行两个整数 n,kn,k ,意义如题所述。
接下来的若干行,每行代表一次操作,具体如下:
-
1\ p\ x_1\ \ y_1,...,x_p\ y_p1 p x1 y1,...,xp yp :表示一个插入操作,其中共有 pp 个字段,第 ii 字段的名字是 x_ixi ,值为 y_iyi .此处我们保证 1 \leq x_i \leq k, 1\leq y_i \leq 10001≤xi≤k,1≤yi≤1000,并且 x_i,y_ixi,yi 均为整数。
-
2\ x\ y_{min}\ y_{max}2 x ymin ymax:表示一次查询操作,表示查询所有满足 字段 xx 的值在 [y_{min},y_{max}][ymin,ymax] 之间的记录有多少个。
输出格式
对于每个查询操作,输出一行一个整数,表示符合条件的记录个数。
输入输出样例
输入 #1
4 5 1 2 1 2 2 4 2 2 1 5 1 2 3 5 4 6 2 4 7 8
输出 #1
1 0
#include <iostream> #include <vector> #include <cmath> #include <algorithm> #include <unordered_map> #include <map> using namespace std; int main() { int k; // 最大长度为k int n; // n次操作 int type; // 操作类别 int p; // 插入数量 int x, y; // 名字与值 int maxy, miny; // 查询范围 vector<vector<int>> res(1001); cin >> n >> k; while (n--) { cin >> type; if (type == 1) { //插入操作 cin >> p; while (p--) { cin >> x >> y; res[x-1].emplace_back(y); } } else{ int c = 0; cin >> x >> miny >> maxy; for (auto& i : res[x - 1])if (i >= miny && i <= maxy)c++; cout << c << endl; } } return 0; }
hello my world
本文来自博客园,作者:slowlydance2me,转载请注明原文链接:https://www.cnblogs.com/slowlydance2me/p/16908886.html