Submission #1311537

#TimeUsernameProblemLanguageResultExecution timeMemory
1311537micodiyA Huge Tower (CEOI10_tower)C++20
30 / 100
276 ms48800 KiB
#ifndef CLION_DEBUG // #pragma GCC optimize("O2") #pragma GCC optimize("Ofast,inline,unroll-loops") // #pragma GCC optimize("O0") #endif #include <bits/stdc++.h> #include <cmath> #include <ext/rope> // #pragma GCC target("avx2") // types typedef __int128_t i128; typedef int8_t i8; typedef int16_t i16; typedef int32_t i32; typedef int64_t i64; typedef float f32; typedef double f64; typedef long double f80; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> template<typename T> using ordered_set = __gnu_pbds::tree< T, __gnu_pbds::null_type, std::less<>, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update >; template<typename T> using ordered_multiset = __gnu_pbds::tree< T, __gnu_pbds::null_type, std::less_equal<>, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update >; template<typename T> using matrix = std::vector<std::vector<T> >; // defines #define cto static_cast #define int i64 #define float f64 // constants template<typename T> constexpr T inf = T{}; template<> constexpr i64 inf<i64> = 4e18; template<> constexpr f80 inf<f80> = 1e100; template<> constexpr f64 inf<f64> = 1e100; template<> constexpr i32 inf<i32> = 1e9; constexpr i64 prime18 = 447421542630798497; constexpr i64 mod = 1e9 + 7; //constexpr i64 mod = 998244353; //constexpr i64 mod = 617980241; constexpr f64 eps6 = 1e-6; constexpr f64 eps10 = 1e-10; // io void optimize_in_out_put() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); } void redirect_in_out_put(const char *input, const char *output) { if (input != nullptr) freopen(input, "r", stdin); if (output != nullptr) freopen(output, "w", stdout); } int read_time() { int a, b; char c; std::cin >> a >> c >> b; return a * 60 + b; } template<typename T> std::pair<T, T> operator+(const std::pair<T, T> &lhs, const std::pair<T, T> &rhs) { return {lhs.first + rhs.first, lhs.second + rhs.second}; } template<typename T> std::pair<T, T> operator-(const std::pair<T, T> &lhs, const std::pair<T, T> &rhs) { return {lhs.first - rhs.first, lhs.second - rhs.second}; } template<typename T> bool operator==(const std::pair<T, T> &lhs, const std::pair<T, T> &rhs) { return lhs.first == rhs.first && lhs.second == rhs.second; } template<typename T> T sign(T v) { return v > 0 ? 1 : v == 0 ? 0 : -1; } float gttm() { return (float) clock() / CLOCKS_PER_SEC; } struct pair_hash { template<typename T, typename U> std::size_t operator()(const std::pair<T, U> &x) const { return ((i128) std::hash<T>()(x.first) * (i128) std::hash<U>()(x.second)) % prime18; } }; #ifdef CLION_DEBUG #define debug_assert(c) assert(c) #else #define debug_assert(c) #endif // main code using namespace std; // #define TESTS_ENABLED void solve() { int n, d; cin >> n >> d; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a.begin(), a.end()); ordered_set<pair<int,int> > added; vector<int> dp(n); dp[0] = 1; added.insert({a[0], rand()}); // cout << 0 << " "; for (int i = 1; i < n; i++) { added.insert({a[i], rand()}); auto it = added.upper_bound({a[i] - d, 0}); // auto it = added.lower_bound(a[i] - d); auto cnt = ((int) added.size() - 1) - (int) added.order_of_key(*it); // cout << cnt << " "; dp[i] = (i ? dp[i - 1] : 0) * (cnt + 1); // cout << "!"; // for (auto add: added) { // cout << add.first << " "; // } // cout << "\n"; } // cout << "\n"; // for (int i = 0; i < dp.size(); i++) // cout << dp[i] << " "; cout<<dp.back()<<"\n"; } void init() { } signed main() { init(); optimize_in_out_put(); #ifdef CLION_DEBUG redirect_in_out_put("../input.txt", "../output.txt"); #else // ... // #endif int T = 1; #ifdef TESTS_ENABLED cin >> T; #endif while (T--) solve(); cout.flush(), cerr.flush(); return 0; }

Compilation message (stderr)

tower.cpp: In function 'void redirect_in_out_put(const char*, const char*)':
tower.cpp:80:34: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |     if (input != nullptr) freopen(input, "r", stdin);
      |                           ~~~~~~~^~~~~~~~~~~~~~~~~~~
tower.cpp:81:35: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   81 |     if (output != nullptr) freopen(output, "w", stdout);
      |                            ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...