赛氪刷题,为什么RUNTIME ERROR
1.5.5 点的离散化
Description
在平面直角坐标系上有nn个整点(x_i,y_i)(xi,yi).现在需要你按照从左往右,从下往上的顺序依次给每个点编号11到nn。
要求按照编号从小到大的顺序输出每个点的坐标;并按照点的输入顺序输出每个点的编号。
Input
第一行一个正整数nn。表示点的个数。
接下来有nn行。第i+1i+1行有两个以空格分隔的整数x_i \; y_ixiyi。
Output
共n+1n+1行。前nn行分别是点的坐标,第ii行两个以空格分隔的数X_i\; Y_iXiYi,表示编号为ii的点的坐标。
第n+1n+1行,共nn个以空格分隔开的整数。第ii个数r_iri表示输入中第ii个点的编号。
Sample Input 1
4 0 0 1 1 0 3 3 0
Sample Output 1
0 0 0 3 1 1 3 0 1 3 2 4
Hint
|x_i|,|y_i| \leq 2^{31}-1; 1 \leq n \leq 10^6.∣xi∣,∣yi∣≤231−1;1≤n≤106.
Source
Saikr Online Judge http://oj.saikr.com
#include<map>
#include <iostream>
#include<algorithm>
using namespace std;
struct point {
int a;
int b;
};
struct point p[1000000];
struct point q[1000000];
int cmp(point a,point b) {
if (a.a != b.a) {
return a.a < b.a;
}
else {
return a.b < b.b;
}
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> p[i].a >> p[i].b;
q[i].a = p[i].a;
q[i].b = p[i].b;
}
sort(p, p+n, cmp);
for (int i = 0; i < n; i++) {
cout << p[i].a << " " << p[i].b << endl;
}
for (int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if (p[i].a == q[j].a && p[i].b == q[j].b) {
cout << j+1;
break;
}
}
if (i != n - 1) {
cout << " ";
}
else {
cout << endl;
}
}
return 0;
}