Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.InputStreamReader;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.io.BufferedReader;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.util.StringTokenizer;
- import java.io.InputStream;
- /**
- * Built using CHelper plug-in
- * Actual solution is at the top
- */
- public class Main {
- public static void main(String[] args) {
- InputStream inputStream = System.in;
- OutputStream outputStream = System.out;
- InputReader in = new InputReader(inputStream);
- PrintWriter out = new PrintWriter(outputStream);
- ProblemD solver = new ProblemD();
- solver.solve(1, in, out);
- out.close();
- }
- }
- class ProblemD {
- public void solve(int testNumber, InputReader in, PrintWriter out) {
- int k = in.nextInt();
- int left = 0;
- int right = 100001;
- while (right - left > 1){
- int mid = (right + left) / 2;
- long inv = ((long)mid*(mid - 1)) / 2;
- if (inv >= k)right = mid;
- else left = mid;
- }
- long inversion = ((long)right*(right - 1)) / 2;
- int []ar = new int[right + 1];
- boolean []over = new boolean[right + 1];
- int z = 0;
- ArrayList<Integer> arrayList = new ArrayList<Integer>();
- while (inversion > k){
- int lo = 0;
- int hi = right + 1;
- while (hi - lo > 1){
- int mid = (hi + lo) / 2;
- long dif = inversion - (right - mid);
- if (dif >= k)hi = mid;
- else lo = mid;
- }
- while (inversion - (right - hi) < k)hi--;
- arrayList.add(hi);
- over[hi] = true;
- inversion -= (right - hi);
- }
- out.print(right+"\n");
- int s = right - arrayList.size();
- for (int i = 0; i < arrayList.size(); i++) {
- out.print(arrayList.get(i)+" ");
- }
- for (int i = right; i >= 1 ; i--) {
- if (over[i])continue;
- out.print(i);
- if (s > 0){
- out.print(" ");
- s--;
- }
- }
- }
- }
- class InputReader {
- public BufferedReader reader;
- public StringTokenizer tokenizer;
- public InputReader(InputStream stream) {
- reader = new BufferedReader(new InputStreamReader(stream));
- tokenizer = null;
- }
- public String next() {
- while (tokenizer == null || !tokenizer.hasMoreTokens()) {
- try {
- tokenizer = new StringTokenizer(reader.readLine());
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- return tokenizer.nextToken();
- }
- public int nextInt() {
- return Integer.parseInt(next());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement