Submission #1293086

#TimeUsernameProblemLanguageResultExecution timeMemory
1293086vivkostovFancy Fence (CEOI20_fancyfence)C++20
15 / 100
32 ms9452 KiB
#include<bits/stdc++.h> using namespace std; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn=1e9+7; struct cell { int w,ind; long long int h; bool operator<(const cell&c)const { if(h!=c.h)return h<c.h; return ind<c.ind; } }; int n,a[100005],b[100005],dist[100005]; long long int otg,di,raz,um,br; cell c[100005],p[400005],inf; void build(int l,int r,int h) { if(l==r) { p[h]=c[l]; return; } build(l,(l+r)/2,h*2); build((l+r)/2+1,r,h*2+1); p[h]=min(p[h*2],p[h*2+1]); } void update(int l,int r,int q,int h) { if(l>q||r<q)return; if(l==r) { p[h].h=1e9+1; return; } update(l,(l+r)/2,q,h*2); update((l+r)/2+1,r,q,h*2+1); p[h]=min(p[h*2],p[h*2+1]); } cell query(int l,int r,int ql,int qr,int h) { if(l>qr||r<ql)return inf; if(l>=ql&&r<=qr)return p[h]; return min(query(l,(l+r)/2,ql,qr,h*2),query((l+r)/2+1,r,ql,qr,h*2+1)); } void rec(int l,int r,int last) { if(l>r)return; vector<cell>v; v.push_back(query(1,n,l,r,1)); //cout<<l<<" "<<r<<endl; update(1,n,v[0].ind,1); while(true) { v.push_back(query(1,n,l,r,1)); if(v.back().h!=v[0].h) { v.pop_back(); break; } update(1,n,v.back().ind,1); } di=(dist[r]-dist[l-1]); raz=v[0].h-last; um=(((di+1)*di)/2)%maxn; otg=otg+(last*((raz*um)%maxn)%maxn)%maxn; otg=otg+(um*(((raz*(raz+1))/2)%maxn))%maxn; //cout<<l<<" "<<r<<" "<<last<<" "<<otg<<endl; int prev=l; for(int i=0;i<v.size();i++) { //rec(prev,v[i].ind-1,v[0].h); prev=v[i].ind+1; } rec(prev,r,v[0].h); } void read() { inf.h=1e9+1; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; c[i].h=a[i]; c[i].ind=i; } for(int i=1;i<=n;i++) { cin>>b[i]; c[i].w=b[i]; dist[i]=dist[i-1]+b[i]; dist[i]%=maxn; } build(1,n,1); rec(1,n,0); cout<<otg<<endl; } int main() { speed(); read(); }
#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...