Submission #1173219

#TimeUsernameProblemLanguageResultExecution timeMemory
1173219danglayloi1Fancy Fence (CEOI20_fancyfence)C++20
100 / 100
128 ms15572 KiB
#include <bits/stdc++.h> #define ii pair<int, int> #define fi first #define se second #define inf 0x3f3f3f3f3f3f3f3f using namespace std; using ll = long long; const ll mod=1e9+7; const int nx=1e5+5; ll add(ll a, ll b) { a+=b; if(a>=mod) a-=mod; return a; } ll mul(ll a, ll b) { a*=b; if(a>=mod) a%=mod; return a; } ll del(ll a, ll b) { a-=b; if(a<0) a+=mod; return a; } ll pw(ll a, ll n) { if(!n) return 1; ll tmp=pw(a, n>>1); tmp=mul(tmp, tmp); if(n&1) tmp=mul(tmp, a); return tmp; } ll base; ll get(ll l, ll r) { return mul(mul(add(l, r), (r-l+1+mod)%mod), base); } int n, r[nx]; pair<ll, ll> seg[nx]; ll h[nx], w[nx], ans=0, cur=0; vector<int> rar, st[nx]; map<ll, ll> mp; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); base=pw(2, mod-2); cin>>n; for(int i = 1; i <= n; i++) cin>>h[i], rar.emplace_back(h[i]); for(int i = 1; i <= n; i++) { cin>>w[i]; seg[i]={cur+1, cur+w[i]}; cur+=w[i]; } cur=0; sort(rar.begin(), rar.end()); rar.erase(unique(rar.begin(), rar.end()), rar.end()); for(int i = 1; i <= n; i++) h[i]=upper_bound(rar.begin(), rar.end(), h[i])-rar.begin(), st[h[i]].emplace_back(i); for(int i = rar.size(); i >= 1; i--) { for(int id:st[i]) { ll le=seg[id].fi, ri=seg[id].se; if(mp.find(le-1)!=mp.end()) { cur=del(cur, get(1, (le-mp[le-1])%mod)); le=mp[le-1]; } if(mp.find(ri+1)!=mp.end()) { cur=del(cur, get(1, (mp[ri+1]-ri)%mod)); ri=mp[ri+1]; } mp[le]=ri; mp[ri]=le; cur=add(cur, get(1, (ri-le+1)%mod)); } ll hei=(i==1)?rar[0]:(rar[i-1]-rar[i-2]); ans=add(ans, mul(cur, get(del(rar[i-1], hei-1), rar[i-1]))); } 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...