vector可以看成动态数组。
函数与功能特性各大参考书都有记载。
注意几点:
1.vector随着元素的不断插入,会自动申请空间。
2.insert可以插入元素到向量中间,erase类似。
3.想不出来了+_+
n.………………
例题:马鞍数。
简明题意:在N2规模的矩阵里,有M个数(其余为空格子),有Q个询问,每次询问x行y列的数字是不是马鞍数,保证询问的坐标上的格子有数字,
如果是马鞍数,打印该列所有数字, 分两行按坐标升序打印。
马鞍数:满足这个数是这个数所在行的最小值,也是所在列的最小值。
100 <= N <= 10000 , 100 <= M <= 1000000, 0 < Q <= 1000
以下代码由ccf的代码改写qwq
1 #include<vector> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 struct node{ 6 int x, y, val; 7 }; 8 bool cmp(node a, node b) { 9 if(a.x == b.x) return a.y < b.y; 10 return a.x < b.x; 11 } 12 node a[1000006]; 13 vector<int> x[1003], y[1003]; 14 15 int minx[1003], miny[1003]; 16 int n, m, q; 17 int main() { 18 cin >> n >> m >> q; 19 for(int i = 0; i < m; ++i) 20 cin >> a[i].x >> a[i].y >> a[i].val; 21 sort(a,a+m,cmp); 22 //排序,目的是使坐标有序 23 for(int i = 0; i <= n; ++i) 24 minx[i] = miny[i] = 100000001; 25 //最小值初始化 26 for(int i = 0; i < m; ++i) { 27 int xx = a[i].x, yy = a[i].y; 28 29 minx[xx] = min(minx[xx], a[i].val);//收集最小值 30 x[xx].push_back(i);//收集数 31 32 miny[yy] = min(miny[yy], a[i].val); 33 y[yy].push_back(i); 34 35 } 36 37 for(int i = 0; i < q; ++i) { 38 int xx, yy; 39 cin >> xx >> yy; 40 int j; 41 for(j = 0; j < y[yy].size(); ++i) 42 if(xx == a[y[yy][j]].x) break; 43 44 if(j == y[yy].size() || a[y[yy][j]].val != miny[yy] || a[y[yy][j]].val != minx[xx]) 45 cout << "no" << endl; 46 else { 47 for(vector<int>::iterator it = y[yy].begin(); it != y[yy].end(); ++it) 48 cout << a[*it].val << " "; 49 cout << '\n'; 50 } 51 52 } 53 return 0; 54 }
若有错误,请指出。