Advertisement
SorahISA

[NHSPC 2019] D. 獵人與斯芬克斯

Apr 20th, 2020
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. // #pragma GCC target("avx2")
  2. #pragma GCC optimize("O3", "unroll-loops")
  3.  
  4. // #include <bits/extc++.h>
  5. // using namespace __gnu_pbds;
  6.  
  7. #include <bits/stdc++.h>
  8. using namespace std;
  9.  
  10. #define int long long
  11. #define double long double
  12. // template <typename T>
  13. // using pbds_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  14. using pii = pair<int, int>;
  15. template<typename T>
  16. using prior = priority_queue<T, vector<T>, greater<T>>;
  17. template<typename T>
  18. using Prior = priority_queue<T>;
  19.  
  20. #define X first
  21. #define Y second
  22. #define ALL(x) (x).begin(), (x).end()
  23. #define eb emplace_back
  24. #define pb push_back
  25.  
  26. #define fastIO() ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
  27. #define RANDOM() random_device __rd; \
  28.                  mt19937 __gen = mt19937(__rd()); \
  29.                  uniform_int_distribution<int> __dis(0, 1); \
  30.                  auto rnd = bind(__dis, __gen);
  31.  
  32. const int INF = 1E18;
  33. const int mod = 1E9 + 7;
  34.  
  35. int32_t main() {
  36.     fastIO();
  37.    
  38.     int k, n, m;
  39.     cin >> k >> n >> m;
  40.    
  41.     vector<vector<int>> vec(n+1, vector<int>(m+1, 0));
  42.     for (int i = 1; i <= n; ++i) {
  43.         for (int j = 1; j <= m; ++j) cin >> vec[i][j];
  44.     }
  45.    
  46.     for (int i = 1; i <= n; ++i) {
  47.         for (int j = 1; j <= m; ++j) {
  48.             vec[i][j] += vec[i-1][j] + vec[i][j-1] - vec[i-1][j-1];
  49.         }
  50.     }
  51.    
  52.     int ans = 0;
  53.     for (int i = 0; i <= n; ++i) {
  54.         for (int j = i+1; j <= n; ++j) {
  55.             set<int> st; st.insert(0);
  56.             for (int p = 1; p <= m; ++p) {
  57.                 int tmp = vec[j][p] - vec[j][0] - vec[i][p] + vec[i][0];
  58.                 st.insert(tmp);
  59.                 ans = max(ans, tmp - *st.lower_bound(tmp - k));
  60.             }
  61.         }
  62.     }
  63.    
  64.     cout << ans << "\n";
  65.    
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement