提交时间:2022-07-20 11:50:49

运行 ID: 52703

#include<bits/stdc++.h> using namespace std; int n; namespace subtask1{ int a[1005]; long long ans=0; void solve(int n){ for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++){ int pos=i; for(int j=i-1;j>=1;j--)if(a[j]>a[i])pos=j; ans+=i-pos; } printf("%lld\n",ans); } } namespace subtask2{ deque<pair<int,int> >q,q1; long long ans=0; void solve(int n){ for(int i=1,a;i<=n;i++){ scanf("%d",&a); pair<int,int>temp; while(!q.empty()&&q.front().first<=a)temp=q.front(),q.pop_front(),q1.push_back(temp); q.push_back(make_pair(a,i)),ans+=i-q.front().second; while(!q1.empty())temp=q1.back(),q1.pop_back(),q.push_front(temp); } printf("%lld\n",ans); } } int main(){ scanf("%d",&n); if(n<=1000)subtask1::solve(n); else subtask2::solve(n); return 0; }