rt
最后一个点
#include<bits/stdc++.h>
#define int long long
#include<set>
using namespace std;
const int maxn=100005;
//struct node
//{
// int ma,mi;
//}t[maxn<<2];
int a[maxn],n,sum[maxn];
set<int> q;
//void build(int rt,int l,int r)
//{
// if(l==r)
// {
// t[rt].ma=a[l];
// t[rt].mi=a[l];
// return;
// }
// int mid=l+r>>1;
// build(rt<<1,l,mid);
// build(rt<<1|1,mid+1,r);
//}
//node query(int rt,int l,int r,int x,int y)
//{0
// if(x<=l&&r<=y)
// {
// return t;
// }
// int s=0,s1=INT_MAX,smid=l+r>>1;
// if(x<=l)
// {
// node tp=query(rt<<1)
// }
//}
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
int bk[100005],bk1[100005],cs[100005],ma,m;
signed main(){
// freopen("P4086_10.in","r",stdin);
// freopen("homework.txt","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum[i]=sum[i-1]+a[i];
++cs[a[i]];
q.insert(a[i]);
}
for(int i=1;i<=n-2;i++)
{
--cs[a[i]];
if(!cs[a[i]])
q.erase(q.find(a[i]));
int tp=*q.begin();
bk[i]=(sum[n]-sum[i]-tp)/gcd(sum[n]-sum[i]-tp ,n-i-1);
bk1[i]=(n-i-1)/gcd(sum[n]-sum[i]-tp ,n-i-1);
if(i==1)
{
ma=bk[i];
m=bk1[i];
}
else
{
int tp=ma*bk1[i];
int t=m*bk[i];
if(tp<t)
{
ma=bk[i];
m=bk1[i];
}
}
}
// cout<<ma<<' '<<m<<endl;
// system("pause");
int s=0;
for(int i=1;i<=n-2;i++)
{
if(bk[i]==ma&&m==bk1[i])
{
cout<<i<<' ';
}
}
// cout<<endl;
// cout<<s
return 0;
}
哪来的too long,又哪来的line 2?