Submission #918739

#TimeUsernameProblemLanguageResultExecution timeMemory
918739AbitoReal Mountains (CCO23_day1problem2)C++17
0 / 25
66 ms188320 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define F first #define S second #define pb push_back #define ppb pop_back #define ep insert #define endl '\n' #define elif else if #define pow pwr #define sqrt sqrtt //#define int long long #define ll long long #define y1 YONE #define free freeee #define lcm llcm typedef unsigned long long ull; using namespace std; const int N=1e6+5,M=1e6+3; int a[N],n,p,mx,b[N]; multiset<int> seg[4*N+5]; void build(int x,int l,int r){ for (int i=l;i<=r;i++) seg[x].ep(a[i]); if (l==r) return; int mid=(l+r)/2; build(x*2,l,mid); build(x*2+1,mid+1,r); return; } void edit(int x,int l,int r,int i,int val){ seg[x].erase(seg[x].find(val)); seg[x].ep(val+1); if (l==r) return; int mid=(l+r)/2; if (i<=mid) edit(x*2,l,mid,i,val); else edit(x*2+1,mid+1,r,i,val); return; } int query(int x,int l,int r,int lx,int rx,int val){ if (l>rx || r<lx) return INT_MAX; if (l>=lx && r<=rx) return *seg[x].upper_bound(val); int mid=(l+r)/2; return min(query(x*2,l,mid,lx,rx,val),query(x*2+1,mid+1,r,lx,rx,val)); } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin>>n; for (int i=1;i<=n;i++){ cin>>a[i]; if (a[i]<=mx) continue; p=i; mx=a[i]; } for (int i=1;i<=p;i++) b[i]=max(b[i-1],a[i]); for (int i=n;i>=p;i--) b[i]=max(b[i+1],a[i]); set<pair<int,int>> s; for (int i=1;i<=n;i++) if (a[i]!=b[i]) s.ep({a[i],i}); build(1,1,n); int ans=0; while (!s.empty()){ pair<int,int> x=*s.begin(); s.erase(x); int l=query(1,1,n,1,x.S-1,x.F),r=query(1,1,n,x.S+1,n,x.F); ans=(ans+x.F+l+r)%M; edit(1,1,n,x.S,x.F); a[x.S]++; if (a[x.S]!=b[x.S]) s.ep({a[x.S],x.S}); }cout<<ans<<endl; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...