标签:end struct inter adf return call 分享 sts code
Problem Statement
Snuke loves constructing integer sequences.
There are N piles of stones, numbered 1 through N. The pile numbered i consists of ai stones.
Snuke will construct an integer sequence s of length Σai, as follows:
We are interested in the lexicographically smallest sequence that can be constructed. For each of the integers 1,2,3,…,N, how many times does it occur in the lexicographically smallest sequence?
Constraints
Input
The input is given from Standard Input in the following format:
N a1 a2 … aN
Output
Print N lines. The i-th line should contain the number of the occurrences of the integer i in the lexicographically smallest sequence that can be constructed.
Sample Input 1
2 1 2
Sample Output 1
2 1
The lexicographically smallest sequence is constructed as follows:
The resulting sequence is (2,1,1). In this sequence, 1 occurs twice, and 2 occurs once.
Sample Input 2
10 1 2 1 3 2 4 2 5 8 1
Sample Output 2
10 7 0 4 0 3 0 2 3 0
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,t=2,f=1; 4 long long ans[100005]; 5 struct N{int data,num;}a[100005]; 6 bool comp(N x,N y){if(x.data==y.data) return x.num<y.num;else return x.data>y.data;} 7 int main(){ 8 scanf("%d",&n); 9 for(int i=1;i<=n;++i) scanf("%d",&a[i].data),a[i].num=i; 10 sort(a+1,a+n+1,comp); 11 while(t<=n){ 12 while(a[t].data==a[t-1].data) t++; 13 ans[a[f].num]+=1ll*(a[f].data-a[t].data)*(t-1); 14 if(a[t].num>a[f].num) a[f].data=a[t].data; 15 else f=t; 16 t++; 17 } 18 ans[a[f].num]+=1ll*a[f].data*n; 19 for(int i=1;i<=n;++i) printf("%lld\n",ans[i]); 20 }
标签:end struct inter adf return call 分享 sts code
原文地址:https://www.cnblogs.com/xie-dodo/p/8965198.html