标签:
8
2
4
2
4
5
100
2
100
2 3
4 2
5 1
100 2
1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<vector> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 10 struct cmp{ 11 bool operator ()(int &a,int &b){ 12 return a>b;//最小值优先 13 } 14 }; 15 16 map<int,int> m; 17 priority_queue<int,vector<int>,cmp> que; 18 int N,a[200005]; 19 20 21 int main(){ 22 // freopen("01.txt","r",stdin); 23 scanf("%d",&N); 24 for(int i=1;i<=N;i++){ 25 int x=0; 26 scanf("%d",&x); 27 if(m[x]==0){ 28 que.push(x); 29 } 30 ++m[x]; 31 } 32 while(!que.empty()){ 33 int x=que.top();que.pop(); 34 printf("%d %d\n",x,m[x]); 35 } 36 return 0; 37 }
优先队列比较奇怪,必须这样定义比较函数:
1 struct cmp{ 2 bool operator ()(int &a,int &b){ 3 return a>b;//最小值优先 4 } 5 };而不能这样:
1 bool cmp(int a,int b){ 2 return a<b; 3 }还有优先队列的比较函数方向跟sort之类的是相反的(‘<‘和‘>‘不一样)
看了下题解直接sort快排不需要优先队列,咔~
不要问我怎么这么无脑,数据范围太大了,想不出好的方法
420ms很危险啊
TYVJ P1036 统计数字 Label:坑!!!(用queue+map做出来的水)
标签:
原文地址:http://www.cnblogs.com/radiumlrb/p/5794041.html