来源:本站 发布时间:2024-03-05 浏览:160
#include<cstdio> #include<cmath> #include<vector> #include<map> #include<set> #include<algorithm> using namespace std; //#define local typedef long long ll; const int maxn=1e5+5; int p[maxn]; int main() { #ifdef local freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); #endif // local int n; scanf("%d",&n); ll Max =0; int pos=-1; for(int i=0; i < n ;i++){ scanf("%d",p+i); if(p[i]>Max){ Max =p[i];pos= i; } } if(Max==0){ printf("0"); return 0;} if(Max==1){ int sum=p[0]; bool canMerge=false; for(int i=1; i < n; i++){ sum += p[i]; if(p[i]&&p[i-1]) { canMerge=true; break; } } if(canMerge) printf("2"); else printf("%d",sum); return 0; } long long sum=0; bool canMerge=false; bool lessone=false; for(int i=pos; i < n; i++){ if(p[i]==Max) sum += Max; } if(sum== Max){ if(pos>0) { if(p[pos-1]<=p[pos]-3)lessone=true; } if(pos<n-1) { if(p[pos+1]<=p[pos]-3)lessone=true; } if(lessone) { for(int i=0; i < n; i++){ if(p[i]==Max-1) { printf("%d",Max); return 0; } } printf("%d",Max-1); } else printf("%d",Max); return 0; } if(sum==Max*2){ //keng for(int i=pos; i < n; i++){ if(p[i]== Max){ if((i>0&& p[i-1]<=Max-2 )|| (i<n-1&& p[i+1] <=Max-2 ) ){ printf("%d",Max); return 0; } } } printf("%d",Max+1); } for(int i=pos; i < n; i++){ if(p[i]== Max){ if((i>0&& p[i-1])|| (i<n-1&& p[i+1] ) ) { printf("%d",Max+1); return 0; } } } printf("%I64d",sum-Max); return 0; }