展示c++的vector的简单功能

   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 }

若有错误,请指出。

猜你喜欢

转载自www.cnblogs.com/tztqwq/p/10853470.html