题目描述
输入
输出
样例输入
2
1 2
样例输出
2
1
分析:偷看题解,慢慢写出来的。。。。
#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> #include <deque> #include <map> #define range(i,a,b) for(int i=a;i<=b;++i) #define LL long long #define rerange(i,a,b) for(int i=a;i>=b;--i) #define fill(arr,tmp) memset(arr,tmp,sizeof(arr)) using namespace std; int n; LL ans[100005]; pair<LL,LL>aa[100005]; bool cmp(pair<LL,LL>a,pair<LL,LL>b){ return a.second>b.second; } void init() { cin>>n; fill(ans,0); range(i,1,n){ aa[i].first=i; cin>>aa[i].second; } sort(aa+1,aa+1+n,cmp); aa[n+1].second=0; } void solve(){ LL tmp=1,num=aa[1].first; range(i,2,n+1){ if(aa[i].second==aa[i-1].second)++tmp; else ans[num]+=(aa[i-1].second-aa[i].second)*(tmp++); if(aa[i].first<num)num=aa[i].first; } range(i,1,n)printf("%lld\n",ans[i]); } int main() { init(); solve(); return 0; }