莫名too long on line 2
查看原帖
莫名too long on line 2
151647
sycqwq楼主2021/1/27 14:47

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?

2021/1/27 14:47
加载中...