Responsive Ads Here

Wednesday 26 July 2017

Largest Permutation


In this problem you need to find the largest permutation of a given array by using at most k swap.
I am using map(in decreasing order ) here because you need to swap the largest element of array with the current index of the orignal array.So first of all insert values into map with there index values.After that traverse from the beginning in the array and compare the top of the map and swap the values. that's all . Happy Coding :P

problem id:-http://practice.geeksforgeeks.org/problems/largest-permutation/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second
#define gc() getchar()

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

template <typename T> void scan(T &angka){
angka=0;char input=gc();T kali=1;
while(!(48<=input&&input<=57)){ if(input=='-') kali=-1;input=gc();}
while(48<=input&&input<=57) angka=(angka<<3)+(angka<<1)+input-48,input=gc();angka*=kali;
}
int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int t;
sc(t);
int a[10005];
map<int,int,greater<int> > my;
while(t--)
{
int n,k;
sc2(n,k);
my.clear();
rep(i,n) {sc(a[i]); my.insert(mp(a[i],i));}
auto itr=my.begin();
int temp;
for(int i=0;i<n && k;++i)
{
itr=my.begin();
if(itr->X >a[i])
{
temp=a[i];
a[i]=itr->X;
a[itr->Y]=temp;
my[temp]=itr->Y;
--k;
}
my.erase(itr);
}
rep(i,n) pf(a[i]);
putchar('\n');
}
return 0;
}


No comments:

Post a Comment