http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1654
每次模拟一个小车装下的币就可以了!通过记录位置来进行计算!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+10;
int a[maxn],n,pos[maxn];
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&a[i]);pos[a[i]]=i;
}
int x=1;ll sum;ll v,t;sum=1;v=0;t=0;
while(x<n){
while(pos[x]<pos[x+1]&&x<n){
sum++;x++;
}
if(x>=n-1) break;
v+=sum*sum;
t+=pos[x];
x++;sum=1;
}
v+=sum*sum;
t+=n+1;
printf("%lld %d\n",v,t);
}
}