結果
問題 | No.2036 Max Middle |
ユーザー |
![]() |
提出日時 | 2022-08-13 00:21:07 |
言語 | Common Lisp (sbcl 2.5.0) |
結果 |
AC
|
実行時間 | 65 ms / 2,000 ms |
コード長 | 5,773 bytes |
コンパイル時間 | 384 ms |
コンパイル使用メモリ | 34,176 KB |
実行使用メモリ | 27,392 KB |
最終ジャッジ日時 | 2024-09-23 04:52:48 |
合計ジャッジ時間 | 2,154 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 17 |
コンパイルメッセージ
; compiling file "/home/judge/data/code/Main.lisp" (written 23 SEP 2024 04:52:46 AM): ; wrote /home/judge/data/code/Main.fasl ; compilation finished in 0:00:00.036
ソースコード
(in-package #:cl-user);;;;;; Init;;;(eval-when (:compile-toplevel :load-toplevel :execute)#+swank (declaim (optimize (speed 3) (safety 2)))#-swank (declaim (optimize (speed 3) (safety 0) (debug 0)))#+swank (load "~/ghq/github.com/motoshira/atcoder-submission/ac-tools/act.lisp")#-swank (declaim (sb-ext:muffle-conditions sb-ext:compiler-note))#-swank (sb-ext:disable-debugger));;;;;; Reader Macros;;;(eval-when (:compile-toplevel :load-toplevel :execute)(set-dispatch-macro-character#\# #\f#'(lambda (stream c2 n)(declare (ignore c2 n))(let ((form (read stream t nil t)))`(lambda (&optional %) (declare (ignorable %)) ,form))))(set-dispatch-macro-character#\# #\>#'(lambda (stream c2 n)(declare (ignore c2 n))(let ((form (read stream t nil t)))(declare (ignorable form))#-swank nil#+swank (if (atom form)`(format *error-output* "~a => ~a~&" ',form ,form)`(format *error-output* "~a => ~a~&" ',form `(,,@form)))))));;;;;; Libraries;;;;;;;;; Macros;;;(in-package #:cl-user)(defmacro do-iota ((var count &optional (start 0) (step 1)) &body body)(check-type step integer)(let* ((last (gensym))(terminate (if (plusp step) `(>= ,var ,last) `(<= ,var ,last))))`(let ((,last (+ ,start (the fixnum (* ,step ,count)))))(declare (fixnum ,last))(do((,var ,start (+ ,var ,step)))(,terminate)(progn ,@body)))))(defmacro awhen (test &body forms)`(let ((it ,test))(when it,@forms)))(defmacro while (test &body body)`(loop while ,test do (progn ,@body)));;;;;; I/O;;;(in-package #:cl-user)(declaim (inline println))(defun println (obj &optional (stream *standard-output*))#+sbcl (declare (sb-kernel:ansi-stream stream))(let ((*read-default-float-format* 'double-float))(prog1 obj(princ obj stream)(terpri stream))))(declaim (inline %read-byte))(defun %read-byte (&optional (stream *standard-input*))(declare (inline read-byte)#+sbcl (sb-kernel:ansi-stream stream))(the fixnum #+swank (char-code (read-char stream nil #\Nul))#-swank (read-byte stream nil #.(char-code #\Nul))))(declaim (inline read-fixnum))(defun read-fixnum (&optional (in *standard-input*) (byte-reader #'%read-byte));; Ref: https://competitive12.blogspot.com/2020/03/common-lisp.html;; partially modified(declare ((function (stream) (unsigned-byte 8)) byte-reader)(optimize (speed 3) (safety 0) (debug 0)))(let ((minus nil)(res 0))(declare (boolean minus)(fixnum res))(labels ((%byte->num (b)(the fixnum (- (the fixnum b) #.(char-code #\0))))(%digit-p (byte)(<= #.(char-code #\0) (the fixnum byte) #.(char-code #\9)))(%first-proc! ()(loop for byte of-type fixnum = (funcall byte-reader in)do (cond((%digit-p byte)(setf (the fixnum res) (%byte->num byte))(return))((= byte #.(char-code #\Nul))(error "EOF"))((= byte #.(char-code #\-))(setf minus t)))))(%rest-proc! ()(loop for byte of-type fixnum = (funcall byte-reader in)do (cond((%digit-p byte)(setf (the fixnum res) (the fixnum (+ (the fixnum (* res 10)) (%byte->num byte)))))(t (return))))))(declare (inline %byte->num %digit-p %first-proc! %rest-proc!))(%first-proc!)(%rest-proc!)(the fixnum (if minus (- res) res)))))(declaim (inline read-base-char))(defun read-base-char (&optional (stream *standard-input*))(code-char (%read-byte stream)))(defun read-line-fast (&optional (stream *standard-input*))#+(and (not swank) sbcl) (declare (sb-kernel:ansi-stream stream))(loop with buffer of-type base-string = (make-array 0 :element-type 'base-char :fill-pointer 0)for c of-type base-char = (read-base-char stream)until (or (eql c #\Newline)(eql c #\Nul))do (vector-push-extend c buffer)finally (return buffer)))(declaim (inline parse-fixnum))(defun parse-fixnum (string)(with-input-from-string (in string)(read-fixnum in #f(the (unsigned-byte 8)(char-code (read-char % nil #\Nul nil))))))(defun read-times (count &key (result-type 'list) (reader #'read-fixnum))(coerce (loop repeat count collect (funcall reader)) result-type));;;;;; Body;;;(in-package #:cl-user)(defun main ()(let* ((n (read))(as (read-times n :result-type 'vector))(inv-cnt 0)(res 0))(dotimes (i (1- n))(when (> (aref as i) (aref as (1+ i)))(incf res (- i inv-cnt))(incf inv-cnt)))(println res)))#-swank (main);;;;;; Debug;;;#+swank(defun run ()(let ((*standard-input*(make-string-input-stream(with-output-to-string (*standard-output*)(run-program(truename "~/bin/copy-or-paste")'():output *standard-output*)))))(main)));; Raise error on warning at compile time#+(and sbcl (not swank))(eval-when (:compile-toplevel)(when (or (plusp sb-c::*compiler-warning-count*)sb-c::*undefined-warnings*)(error "compiler-error-count:~a, undefined warnings:~a"sb-c::*compiler-warning-count*sb-c::*undefined-warnings*)))