1569: 【入门】数组存数(1500)

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:61 解决:32

题目描述

今有N个数组,初始时,N个数组均为空。共有M次操作,每次在第X个数组中加入数字Y。问最终各数组中有多少数,并将它们排序输出。
比如,输入如下数据:
3 5
1 3
1 2
1 1
2 1
3 1
表示有3个数组,共有5次操作,分别向第1个数组存入3,第1个数组存入2,第1个数组存入1,第2个数组存入1,第3个数组存入1。
输出如下:
3 1 2 3
1 1
1 1
第1行表示:第1个数组中有3个数,排序结果为1 2 3
第2行表示:第2个数组中有1个数,排序结果为1
第3行表示:第3个数组中有1个数,排序结果为1

输入

第一行两个整数N、M(N≤100000,M≤300000)。
接下来M行,每行两个整数X、Y,含义见试题描述。(1≤X≤N,Y≤10^9)

输出

共N行,第i行第一个数SUM,表示第i个数组数的个数,接下来SUM个数,为排序之后的数组。

样例输入 复制

3 5
1 3
1 2
1 1
2 1
3 1

样例输出 复制

3 1 2 3
1 1
1 1

提示

#include<bits/stdc++.h>
using namespace std;
vector<vector<int> > a(100100);
int n,m,i,j,x,y;
int main(){
	cin>>n>>m;
	for (i=0;i<m;i++) {
		cin>>x>>y;
		a[x-1].push_back(y);
	}
	for (i=0;i<n;i++) {
		cout<<a[i].size()<<" ";
		sort(a[i].begin(),a[i].end());
		for(j=0;j<a[i].size();j++)
		    cout<<a[i][j]<<" ";
		cout<<endl;
	}
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
vector <int> a[100100];
int n,m,i,j,x,y;
int main(){
	cin>>n>>m;
	for (i=0;i<m;i++) {
		cin>>x>>y;
		a[x-1].push_back(y);
	}
	for (i=0;i<n;i++) {
		cout<<a[i].size()<<" ";
		sort(a[i].begin(),a[i].end());
		for(j=0;j<a[i].size();j++)
		    cout<<a[i][j]<<" ";
		cout<<endl;
	}
	return 0;
}