题目链接:C. Differential Sorting
题意:选择数组中三个数下标为x,y,z,下标x的值为a[y]-a[z],最少操作使数组变成升序,如果不能成为升序则输出-1
题解:可以让前面的数值都为最后两个数,只需判断最后两个数是否是升序,还有一种特殊情况是最后一个数小于0,这种情况如果该数组不是升序一定不可以变成升序,则输出-1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
vector<int >a(n+1);
for(int i=1;i<=n;i++)
cin>>a[i];
if(a[n-1]>a[n])
cout<<-1<<endl;
else
{
if(a[n]<0)
{
if(is_sorted(a.begin()+1,a.end()))
cout<<0<<endl;
else
cout<<-1<<endl;
}
else
{
cout<<n-2<<endl;
for(int i=1;i<=n-2;i++)
cout<<i<<" "<<n-1<<" "<<n<<endl;
}
}
}
}