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

题目描述

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

具体来说,它支持 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鑫鑫向栄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值