小W与身高

xiaoxiao2025-08-04  31

这道题需要二分在我前面第一个比我高的人的位置,用二分是因为二分的时间复杂度较低这里的check就是判断当前这个是否大于a,题目说要用快读,第一次竟然没看到=-= 快读就是用char把要读的东西读进来,然后在转成int,比普通的要快

#include<bits/stdc++.h> #define ll long long using namespace std; struct node{ int val,ind; }a[1000010]; int read() { int x=0; char c=getchar(),flag='+'; while(!isdigit(c)) flag=c,c=getchar(); while(isdigit(c)) x=x*10+c-'0',c=getchar(); return flag=='-'?-x:x; } bool cmp(node a,node b) { return a.val>b.val; } int main() { int n=read(),minv=1e9; ll ans=0; for(int i=1;i<=n;i++) a[i].val=read(),a[i].ind=i; sort(a+1,a+n+1,cmp); for(int i=1;i<=n;) { int j=i,num=0; ll sum=0; while(a[j].val==a[i].val&&j<=n) { if(a[j].ind>minv) sum+=a[j].ind,num++; j++; } j--; if(minv<1e6) ans+=sum-1ll*minv*num; for(int k=i;k<=j;k++) { minv=min(minv,a[k].ind); } i=j+1; } cout<<ans; return 0; }

来源:zr

转载请注明原文地址: https://www.6miu.com/read-5034245.html

最新回复(0)