Hello, Codeforces!
I'm excited to share my C++ library that can significantly improve the performance of your solutions, especially when dealing with large input and output.
https://github.com/emeraldacoustics/fast-io
For years, I've been using this library myself, and it consistently delivers:
5x faster I/O on average: Solve problems quicker and avoid unnecessary timeouts.
Blazing-fast performance for large data: Notice a 10x speedup for inputs/outputs exceeding 1MB.
But speed isn't everything! This library also prioritizes ease of use:
Seamless integration: Simply replace
cinandcoutwithfinandfoutin your code.Familiar syntax: The library implements standard C++ stream operators for an intuitive experience.
Extended Compatibility: Handles all fundamental data types and offers precision control for floating-point numbers.
I'm confident this library can be a valuable asset for you, especially when dealing with large data. While this is just the first step, stay tuned for future posts where I'll introduce more tools and techniques to help you conquer Codeforces!
Thank you.









Auto comment: topic has been updated by emeraldacoustics (previous revision, new revision, compare).
Auto comment: topic has been updated by emeraldacoustics (previous revision, new revision, compare).
Wow, this library is wonderful!
This is the most easy-to-use fast I/O library I've ever seen. Replacing cin and cout was a breeze.
I also love your recent repositories. Are you still working on them?
Thanks. I've been working on new competitive algorithm repos. I'll post them as soon as I finish the documentation.
Does this work for interactive problems?
To be honest, no. Besides, interactive problems typically involve smaller data exchanges for communication with the judge
I saw your repository and would you mind telling how were you able to achieve those optimizations. Great work btw
The key idea is to reduce the number of calling
fread()andfwrite()functions.did u do any comparison with the
iosdefault fastIO:cin.tie(0)->sync_with_stdio(0)??Aye, of course. I insert
ios::sync_with_stdio(false);in my code by default. But, there are some problems wheretie()andsync_with_stdio()ain't enough.It's quite useful, but its total size reaches 11.6 KB. Completely pasting it in our code will significantly increase our code size. Could you please compress your code a bit? emeraldacoustics
Thanks for your kind suggestion. I agree with the idea that the code size is quite humongous, and using
stringstreamto resolve the issue is being considered.please let me know how to use it!!
Oh, my pleasure. Copy
fiostream_x86.hppsource into your solution. If you need to input or output 128-bit integers, usefiostream_x64.hpp.Replace
cinwithfin,coutwithfout, andendlwithfendl.When you are testing fast-io via standard input and output, don't forget to input a null character at the end of your input, i.e.,
Ctrl+Zin Windows.Sorry I am new to computer stuff, when I have to use long long/long long int/long double, I need to use fiostream_x64.hpp, for int/double fiostream_x86.hpp is ok. Is my understanding correct?
I'm afraid not.
fiostream_x86.hppworks forlong longandlong double. But you must choosefiostream_x64.hppif 128-bit integers have to be input or output.Have you tested it rigorously? In other words, can we be 100% confident that your program is correct? :)
Yes, I have. My friends and I have tested this library for over 5 years, which has given us high confidence in its ability to handle a wide range of exceptions. This library has proven its reliability and efficiency on various CP platforms. I assure you that this library works correctly and provides the same behavior as the standard I/O streams.
Library is 5 years old and
using namespaces std;is still there in header files? :)If you wrote custom stream buffers instead, everyone would be able to use them with other streams too.
BTW, I wrote simple test program, ran it and got segmentation fault in
fistream::next_buffer(). Maybe I did something wrong but let us consider the following program:After replacement
std::coutwithfoutandstd::cinwithfinwe have this one:But it does not even compile:
Please have a look at
fistreamandfostreamdeclaration. I'm afraid this library doesn't support input and output forstd::string.Thanks for your comment and I'll keep that in mind in updating my library.
I didn't know there were other competitive programmers in Ireland
There is plenty. We just hide in pubs =)
main.cpp:1:10: fatal error: fiostream_x86.h: No such file or directory 1 | #include "fiostream_x86.h" | ^~~~~~~~~~~~~~~~~ compilation terminated.
Do you mind sharing your
main.cppso that I can help you fix the errors?eXXXXXXXXXXXXXXXXXXcellent work!
Maybe I'm just stupid/ignorant at this point, but could anyone tell me how to use custom libraries in online judges in a reasonable way?
Instead of including the custom libraries in the header, you can copy them into your source code if you want to use them for online judges.
Nice. I have always wondered. How does one go about learning enough C++ to be able to code something like this?