제출 #596676

#제출 시각아이디문제언어결과실행 시간메모리
596676slime순열 (APIO22_perm)C++17
91.33 / 100
169 ms460 KiB
#include "perm.h"
#include "bits/stdc++.h"
using namespace std;
static long long MX=1e18;

long long count_increasing(const vector<int>& v) {
  vector<long long> dp(v.size() + 1, 0);
  dp[0] = 1;
  for (int x : v)
  {
  	for (int i = 0; i <= x; i++)
  	{
  		dp[x+1] += dp[i];
  		dp[x+1] = min(dp[x+1],MX+1);
  	}
  }
  long long result = 0;
  for (int i = 0; i <= (int)v.size(); i++){
  	result += dp[i];
  	result = min(result,MX+1);
  }
  return result;
}

int fastlog(long long x) {
  return (x == 0 ? -1 : 64 - __builtin_clzll(x) - 1);
}

std::vector<int> construct_permutation(long long k)
{
  vector<int> cur = {};
  
  cur.push_back(0); 
  for(int i = 1; ; i++) {
    int lb = 0, rb = cur.size();
    if(count_increasing(cur) == k) {
      return cur;
    }
    while(lb < rb) {
      int mid = (lb + rb + 1) >> 1;
      vector<int> now;
      for(int j=0; j<mid; j++) now.push_back(cur[j]);
      now.push_back(i);
      for(int j=mid; j<cur.size(); j++) now.push_back(cur[j]);
      if(count_increasing(now) <= k) lb = mid;
      else rb = mid - 1;
    }
    vector<int> now;
    for(int j=0; j<lb; j++) now.push_back(cur[j]);
    now.push_back(i);
    for(int j=lb; j<cur.size(); j++) now.push_back(cur[j]);
    cur = now;
  }
  return cur;
 
}
// 576460752303423487

컴파일 시 표준 에러 (stderr) 메시지

perm.cpp: In function 'std::vector<int> construct_permutation(long long int)':
perm.cpp:44:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |       for(int j=mid; j<cur.size(); j++) now.push_back(cur[j]);
      |                      ~^~~~~~~~~~~
perm.cpp:51:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |     for(int j=lb; j<cur.size(); j++) now.push_back(cur[j]);
      |                   ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...