Submission #939617

#TimeUsernameProblemLanguageResultExecution timeMemory
939617andrei_boacaFish 2 (JOI22_fish2)C++17
25 / 100
1752 ms3772 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll n,v[100005],q,s[100005],mars[100005]; int solve(int l,int r) { s[l-1]=0; mars[l-1]=0; for(int i=l;i<=r;i++) { s[i]=s[i-1]+v[i]; mars[i]=0; } stack<int> coada; for(int i=l;i<=r;i++) { while(!coada.empty()&&v[coada.top()]<v[i]) coada.pop(); int st=l-1; if(!coada.empty()) st=coada.top(); if(s[i-1]-s[st]<v[i]) { mars[st+1]++; mars[i]--; } coada.push(i); } while(!coada.empty()) coada.pop(); for(int i=r;i>=l;i--) { while(!coada.empty()&&v[coada.top()]<v[i]) coada.pop(); int dr=r+1; if(!coada.empty()) dr=coada.top(); if(s[dr-1]-s[i]<v[i]) { mars[i+1]++; mars[dr]--; } coada.push(i); } int ans=0; for(int i=l;i<=r;i++) { mars[i]+=mars[i-1]; if(mars[i]==0) ans++; } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=1;i<=n;i++) cin>>v[i]; cin>>q; if(q<=1000) { while(q--) { int tip; cin>>tip; if(tip==1) { int poz,val; cin>>poz>>val; v[poz]=val; } else { int l,r; cin>>l>>r; cout<<solve(l,r)<<'\n'; } } return 0; } return 0; }
#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...