题目描述
花栗鼠很喜欢偷吃生产队的大萝卜,因此花栗鼠科技大学正在研究一种新型的数据库,叫做萝卜数据库。
具体来说,它支持 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;
}