如何修改代码可以通过这一题,用什么算法,只能通过测试样例,运行超时。
判断bea没必要这么麻烦,用一个标记记录是否出现递减数字,然后判断每次新插入的数跟vector中最后一个数和第一个数的大小即可。
运行结果:
代码:
#include <iostream>
using namespace std;
char str[200005]={0};
int arr[200005];
int main()
{
int t,q,i=0,j=0;
int val;
int k=0;
int minVal = 0,nextVal = 0;
scanf("%d",&t);
while(i<t)
{
cin >> q;
int flag = 0; //标记是否出现递减数
k = 0;
for(j=0;j<q;j++) //读入q个数
{
scanf("%d",&val);
if(k== 0 ) //是beatiful
{
str[j]='1';
arr[k++]=val;
minVal = val;
}else if(k == 1) //是beatiful
{
str[j]='1';
arr[k++]=val;
//判断是否出现递减的情况
if(arr[1] < arr[0])
{
minVal = arr[1];
flag = 1;
}else
minVal = arr[0];
}else
{
if(flag== 0) //没有出现递减数,只需要判断当前数与vector中的最后一个数的大小
{
if(val >= arr[k-1])
{
str[j]='1';
arr[k++]=val; //是
}else //出现递减数
{
flag = 1;
str[j]='1';
arr[k++]=val;
//找到当前比val大的最前的一个数
minVal = val;
for(int x = 0;x<k;x++)
{
if(arr[x] > val)
{
nextVal = arr[x];
break;
}
}
}
}else
{
if(val >= minVal && val <= nextVal)
{
str[j]='1';
arr[k++]=val;
}else{
str[j]='0';
}
}
}
}
str[q] = 0;
//输出
cout << str<<endl;
i++;
}
return 0;
}
#include <iostream>
#include <vector>
#include <string>
int main()
{
int t;
std::cin >> t;
while (t--)
{
int q;
std::cin >> q;
std::vector<int> queries(q);
for (int i = 0; i < q; i++)
{
std::cin >> queries[i];
}
std::string result;
int min1 = 1e9 + 1, min2 = 1e9 + 1;
for (int x : queries)
{
if (x <= min1)
{
result.push_back('1');
min1 = x;
}
else if (x <= min2)
{
result.push_back('1');
min2 = x;
}
else
{
result.push_back('0');
}
}
std::cout << result << std::endl;
}
return 0;
}
因为部件对象是复杂对象的一部分,因此: