Submission #628722

#TimeUsernameProblemLanguageResultExecution timeMemory
628722IwanttobreakfreeFancy Fence (CEOI20_fancyfence)C++17
30 / 100
91 ms4472 KiB
#include <iostream> #include <vector> #include <map> #include <stack> using namespace std; const int mod=1e9+7; #define int long long signed main(){ int n; cin>>n; vector<int> v(n),h(n),pre(n+1); map<int,int> mp; for(int& i:h)cin>>i; for(int& i:v)cin>>i; for(int i=0;i<n;i++)pre[i+1]=(pre[i]+v[i])%mod; stack<pair<int,int>> st; st.push({0,n}); vector<pair<int,int>> comp(n); for(int i=n-1;i>=0;i--){ while(st.top().first>=h[i])st.pop(); int dif=pre[st.top().second]-pre[i]; if(dif<0)dif+=mod; comp[i]={h[i],dif}; st.push({h[i],i}); } int ans=0; for(int i=0;i<n;i++){ pair<int,int> x=comp[i]; //cout<<(1ll*x.first*(x.first+1)/2)<<' '<<(1ll*x.second*(x.second+1)/2)<<'\n'; ans+=(((x.first*(x.first+1)/2)%mod)*((x.second*(x.second+1)/2)%mod))%mod; ans%=mod; if(i){ pair<int,int> y=comp[i-1]; ans-=(((y.first*(y.first+1)/2)%mod)*((x.second*(x.second+1)/2)%mod))%mod; if(ans<0)ans=((ans%mod)+mod)%mod; } } //cout<<(((1ll*(mod-7)*(mod-6)/2)%mod)*((1ll*(mod-7)*(mod-6)/2)%mod))%mod<<' '; cout<<ans; }
#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...