➤ Problem Link : 962D. Merge Equals
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int unordered_map<ll,ll> us; bool comp(ll x, ll y) { return us[x]<us[y]; } int main() { ll x; int n; cin>>n; map<ll,set<int> > mp; vector<ll> vec; for(int i=0;i<n;i++) { cin>>x; mp[x].insert(i); } ll v; set<int> s; for(auto it = mp.begin();it!=mp.end();it++) { v= it->first; s=it->second; auto i=s.begin(); while(i!=s.end()) { i++; if(i==s.end()) // odd { i--; us[v]=*i; vec.push_back(v); break; } mp[2*v].insert(*i); i++; } } sort(vec.begin(),vec.end(),comp); cout<<vec.size()<<"\n"; for(ll v : vec) cout<<v<<" "; }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!