P8843 萝卜数据库 题解

· · 题解

【题目传送门】

【题意解释】

模拟一个数据库,支持两种操作:

【题目分析】

我们可以使用两个数组来模拟这个数据库(以代替复杂一些的vector),一个数组表示地址,一个数组表示数据。

【代码展示】

#include<bits/stdc++.h>
using namespace std;
//定义区 
int n,k;
int m,x,y,op;
int a[100005],b[100005],num;

int main()
{
    scanf("%d%d",&n,&k);
    for(int T=0;T<n;T++)
    {
        scanf("%d",&op);//输入操作类型
        if(op==1)//插入操作 
        {
            scanf("%d",&m);
            for(int i=1;i<=m;i++)
            {
                scanf("%d%d",&x,&y);//x为地址,y为数据
                a[++num]=x,b[num]=y;
                //数组a储存第num个数据的地址
                //数组b则储存第num个数据
            }
        }
        else//询问操作 
        {
            int ans=0,l,r;//l,r 即 ymin,ymax 
            scanf("%d%d%d",&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 
            printf("%d\n",ans);//输出,千万不要忘记换行! 
        }
    }
    return 0;//The end 
}
//MXX 2022/11/29

AC记录

谢谢!