Submission #1206027

#TimeUsernameProblemLanguageResultExecution timeMemory
1206027squatrianHacker (BOI15_hac)C++20
100 / 100
84 ms16736 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; using std::mt19937_64; using std::random_device; using std::uniform_int_distribution; #include <numeric> #define ff first #define ss second #define int long long #define pb push_back #define mp make_pair #define pii pair<int,int> #define vi vector<int> #define mii map<int,int> #define pqb priority_queue<int> #define pqs priority_queue<int,vi,greater<int> > #define setbits(x) __builtin_popcountll(x) #define zrobits(x) __builtin_ctzll(x) #define mod 1000000007 #define inf (int) 1e17+1 #define ps(x,y) fixed<<setprecision(y)<<x #define mk(arr,n,type) type *arr=new type[n]; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef tree<pair<int,int>, null_type, less<pair<int,int>>, rb_tree_tag, tree_order_statistics_node_update> pbds; void cpc() { #ifndef ONLINE_JUDGE freopen("paintbarn.in", "r", stdin); freopen("paintbarn.out", "w", stdout); #endif } // int dx[] = {-1, 0, 1, 0}; // int dy[] = {0, 1, 0, -1}; int exp(int x, int n, int m) { if(x == 0 and n == 0) return 1; x %= m; int res = 1; while (n > 0) { if (n % 2 == 1) { res = res * x % m; } x = x * x % m; n /= 2; } return res; } int gcd(int a,int b){ if(a == 0) return b; return gcd(b%a,a); } stack<pair<int,int>> s1,s2; signed main() { // cpc(); int t=1; // cin >> t; while(t--){ int n; cin >> n; vector<int> v(n); for(auto &x:v) cin >> x; vector<int> a; int ct = (n+1)/2-1; int i = n-ct; while(ct--){ a.pb(v[i++]); } for(int j = 0 ; j < n; j++) a.pb(v[j]); ct = (n+1)/2-1; i = 0; while(ct--){ a.pb(v[i++]); } // for(auto &x:a) cout<<x<<" "; // cout<<endl; int cur_sum = 0; ct = (n+1)/2-1; for(int i = 0 ; i <= ct; i++){ cur_sum += a[i]; } s1.push({cur_sum,cur_sum}); // cout<<cur_sum<<endl; for(int i = ct+1; i <=2*ct; i++){ cur_sum -= a[i-ct-1]; cur_sum += a[i]; s1.push({cur_sum,min(s1.top().ss,cur_sum)}); } // while(!s1.empty()){ // cout<<s1.top().ff<<" "<<s1.top().ss<<endl; // s1.pop(); // } // cout<<cur_sum<<endl; int ans = s1.top().ss; for(int i = 2*ct+1; i < a.size(); i++){ cur_sum -= a[i-ct-1]; cur_sum += a[i]; // cout<<cur_sum<<endl; if(s2.empty()){ while(!s1.empty()){ if(s2.empty()) s2.push({s1.top().ff,s1.top().ff}); else s2.push({s1.top().ff,min(s1.top().ff,s2.top().ss)}); s1.pop(); } } s2.pop(); if(s1.empty()) s1.push({cur_sum,cur_sum}); else s1.push({cur_sum,min(s1.top().ss,cur_sum)}); int mi = s1.top().ss; if(!s2.empty()) mi = min(s2.top().ss,s1.top().ss); ans = max(ans,mi); } cout<<ans<<endl; } return 0; }

Compilation message (stderr)

hac.cpp: In function 'void cpc()':
hac.cpp:34:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |     freopen("paintbarn.in", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
hac.cpp:35:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |     freopen("paintbarn.out", "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...