O(n3)算法,好吧,其实正解就是这样子打的。
如果给你极限数据的话:
1,1,2,3,5,8,13,21,34,55,89,144…
就多也就是50项(差不多,如果大于50,那肯定有解)
所以啊,要不就是50项没有找到,要不就是找到了,就这么简单。
再引用一下蔡dalao的说明吧:
%d%a%l%a%o
上标:
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,a[100010],opt,x;
inline int read()
{
int x=0; char c=getchar();
while (c<'0' || c>'9') c=getchar();
while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
bool check(int x,int y,int z)
{
if (x>y) swap(x,y);
if (y>z) swap(y,z);
if (x>y) swap(x,y);
if (x+y>z)
{
printf("%d %d %d
",x,y,z);
return 1;
}
else return 0;
}
void doit()
{
for (int i=3;i<=n;i++)
for (int j=2;j<i;j++)
for (int k=1;k<j;k++)
if (check(a[i],a[j],a[k])) return;
puts("-1 -1 -1");
}
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
n=read();
for (int i=1;i<=n;i++) a[i]=read();
m=read();
while (m--)
{
opt=read();
if (opt==1) x=read(),a[x]=read();
else doit();
}
return 0;
}