[传智杯 #4 初赛] 萝卜数据库

2023-12-13 19:08:16

题目描述

花栗鼠很喜欢偷吃生产队的大萝卜,因此花栗鼠科技大学正在研究一种新型的数据库,叫做萝卜数据库。

具体来说,它支持 k(1≤k≤100)?个字段,每个字段名都是整数,里面存储的数值也都是整数。

现在你支持如下操作:

  • 向数据库中插入一个记录,它可能只会包含?k?个字段的某一部分。具体的操作格式详见“输入格式”。

  • 在数据库中查询有多少条符合条件的记录。

现在你总共有?n?次操作(1≤n≤1000),请你对每个回答操作,输出结果。

输入格式

第一行两个整数 n,k?,意义如题所述。

接下来的若干行,每行代表一次操作,具体如下:

  • 1? p?x1???y1?,...,xp??yp??:表示一个插入操作,其中共有?p?个字段,第?i?字段的名字是 xi??,值为 yi??.此处我们保证 1≤xi?≤k,1≤yi?≤1000,并且 xi?,yi??均为整数。

  • 2? x?ymin??ymax?:表示一次查询操作,表示查询所有满足 字段?x?的值在?[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>
using namespace std;
//定义区 
int n,k;
int m,x,y,op;
int a[100005],b[100005],num;
 
int main()
{
    cin>>n>>k;
	for(int T=1;T<=n;T++)//循环操作的次数
	{
        cin>>op;//输入操作类型
		if(op==1)//插入操作 
		{
            cin>>m;
			for(int i=1;i<=m;i++)
			{
                cin>>x>>y;//x为地址,y为数据
				a[++num]=x,b[num]=y;
                //数组a储存第num个数据的地址
                //数组b则储存第num个数据
			}
		}
		else//询问操作 
		{
			int ans=0,l,r;//l,r 即 ymin,ymax 
            cin>>m>>l>>r;
			for(int i=1;i<=num;i++)//遍历 
				if(a[i]==m)//如果第i个数的地址是所询问的地址 
					if(l<=b[i]&&b[i]<=r)//并且第i个数满足限制条件 
						ans++;//答案+1 
            cout<<ans<<endl;//输出,千万不要忘记换行! 
		}
	}
	return 0;
}

文章来源:https://blog.csdn.net/qq_73062949/article/details/134840691
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。