Submission #1027873

#TimeUsernameProblemLanguageResultExecution timeMemory
1027873UnforgettableplMizuyokan 2 (JOI23_mizuyokan2)C++17
0 / 100
668 ms2644 KiB
#include <bits/stdc++.h> using namespace std; #define int long long void answer(vector<int> arr){ int n = arr.size(); arr.insert(arr.begin(),0); vector<int> S(n+1); for(int i=1;i<=n;i++)S[i]=S[i-1]+arr[i]; vector<pair<int,int>> buffer(n+1); for(int i=0;i<=n;i++)buffer[i]={arr[i]+S[i],i}; sort(buffer.begin(),buffer.end()); auto iter = buffer.begin(); set<int> possible; vector<int> DP(n+1); for(int i=1;i<=n;i++){ while(iter!=buffer.end() and iter->first<S[i-1]){ possible.insert((iter++)->second); } int r = i; for(int jump=131072;jump;jump/=2){ if(r-jump<0)continue; if(S[r-jump]>=S[i-1]-arr[i])r-=jump; } auto iter2 = possible.lower_bound(r); DP[i]=1; auto b = *iter2; for(int j:possible){ if(j==b or j==i-1)break; DP[i]=max(DP[i],DP[j]+2); } } int ans = DP[n]; int sum = arr[n]; for(int i=n-1;i;i--){ if(arr[i]<sum)ans=max(ans,DP[i]+1); sum+=arr[i]; } cout << ans << '\n'; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<int> L(n+1); for(int i=1;i<=n;i++)cin>>L[i]; int q; cin >> q; for(int i=1;i<=q;i++){ int x,y,a,b;cin>>x>>y>>a>>b; L[x]=y; vector<int> arr; for(int j=a+1;j<=b;j++){ arr.emplace_back(L[j]); } answer(arr); } }
#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...