数组,在stl中有一个可变数组vector
vector是一个单口动态数组 ;
迭代器:vector《int》::iterator it=a.begin();
a[2];
插入:a.push_back();
删除:a.popBack();
例题:
如果单一个结构数组,那也要 10^5*10^7,肯定会 TLE,所以分开两个 数组,有一个计数君,模拟二维数组;
题目描述
超市里有 n(n≤105)n(nle10^5)n(n≤105) 个寄包柜。每个寄包柜格子数量不一,第 iii 个寄包柜有 ai(ai≤105)a_i(a_ile10^5)ai(ai≤105) 个格子,不过我们并不知道各个 aia_iai 的值。对于每个寄包柜,格子编号从 1 开始,一直到 aia_iai。现在有 q(q≤105)q(qle10^5)q(q≤105) 次操作:
1 i j k
:在第 iii 个柜子的第 jjj 个格子存入物品 k(0≤k≤109)k(0le kle 10^9)k(0≤k≤109)。当 k=0k=0k=0 时说明清空该格子。2 i j
:查询第 iii 个柜子的第 jjj 个格子中的物品是什么,保证查询的柜子有存过东西。
已知超市里共计不会超过 10710^7107 个寄包格子,aia_iai 是确定然而未知的,但是保证一定不小于该柜子存物品请求的格子编号的最大值。当然也有可能某些寄包柜中一个格子都没有。
输入格式
第一行 2 个整数 n 和 q,寄包柜个数和询问次数。
接下来 q 个整数,表示一次操作。
输出格式
对于查询操作时,输出答案。
输入输出样例
输入 #1
5 4 1 3 10000 114514 1 1 1 1 2 3 10000 2 1 1
输出 #1
114514 1
代码:
#include<iostream>
#include<vector>
#define max 100000
using namespace std;
struct node{
vector<int> c,v;
int s=0;
}d[max];
int main(){
int n,q,ope,i,j,k;
cin>>n>>q;
for(int g=0;g<q;g++){
cin>>ope;
if(ope==1){
cin>>i>>j>>k;
d[i].s ++;
d[i].c.push_back(j);
d[i].v.push_back(k);
}
if(ope==2){
cin>>i>>j;
int u;
for( u=d[i].s -1;u>=0;u--){
if(d[i].c[u]==j){
cout<<d[i].v [u]<<endl;
break;
}
}
if(u<0)cout<<0<<endl;
}
}
}