标签:pst 优先队列 format 优先 最大的 status ... ios problem
//优先队列+map,将y数组存入优先队,用map标记每个y[i]是否在优先队列中, //每次取最大的一个y[i],看队列中有没有y[i]/2,没有就加入y[i]/2,除去y[i], //如果有再看y[i]/2/2有没有.....直到除到1,队列中还有1就说明不能再减小了。 #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<vector> #include<map> using namespace std; int a[50004]; map<int,int>mp; struct cmp{ bool operator () (int &a,int &b){ return a<b; } }; int main() { int n,x; scanf("%d",&n); priority_queue<int,vector<int>,cmp>q; for(int i=0;i<n;i++){ scanf("%d",&x); mp[x]=1; q.push(x); } mp[0]=1; while(1){ int x=q.top(); while(x>0){ if(mp[x/2]) x/=2; else{ mp[x/2]=1; q.push(x/2);q.pop(); break; } } if(x==0) break; } printf("%d",q.top());q.pop(); while(!q.empty()){ printf(" %d",q.top()); q.pop(); } printf("\n"); return 0; }
标签:pst 优先队列 format 优先 最大的 status ... ios problem
原文地址:http://www.cnblogs.com/--ZHIYUAN/p/6648376.html