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