Pagini recente » Cod sursa (job #465963) | Cod sursa (job #939319) | Cod sursa (job #908161) | Cod sursa (job #520753) | Cod sursa (job #3133825)
#include <fstream>
using namespace std;
ifstream f("farfurii.in");
ofstream g("farfurii.out");
int main()
{
long long int n, inv = 0; //nr de numere de care avem nevoie pt realizarea inversiunilor
long long int k;
f >> n >> k;
f.close();
while(inv * (inv - 1) / 2 < k) //gauss(inv - 1) numarul de inversiuni pe care le realizam cu inv nr
inv++;
for(long long int i = 1; i <= n - inv; i++)
g << i << ' ';
//daca am trecut peste k, va trebui sa scadem nr de inversiuni => mutam o val la stanga
long long int dif = (inv * (inv - 1) / 2) - k;
long long int val = n - dif; //valoarea care ne da numarul dif de inversiuni
g << val << ' '; //daca nu am trecut peste k afisam n, deci e ok
//afisam restul valorilor descrescator pt a obtine numarul de inversiuni
for(long long int i = n; i > n - inv; i--)
if(i != val)
g << i << ' ';
g.close();
return 0;
}