#include<bits/stdc++.h>
using namespace std;
vector<int>p;
int isp(int n)
{
int l=sqrt(n);
if(n==2||n==1)return 1;
for(int i=2;i<=l;i++)
{
if(n%i==0)return 0;
}
return 1;
}
int a[100005];
int find(int n)
{
int l=p.size();
if(l==0)return 0;
for(int i=0;i<l;i++)
{
if(p[i]==n)return 1;
}
return 0;
}
int main()
{
for(int i=2;i<100002;i++)
{
a[i]=isp(i);
}
int n;
cin>>n;
int l=sqrt(n);
for(int i=2;i<=l;i++)
{
if(n%i==0){
p.push_back(i);
p.push_back(n/i);
}
}
for(int i=2;i<n;i++)
{
if(a[i]==1&&find(i)==0)
{
cout<<i;
break;
}
}
}
补题:
1.F Find my Family
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 300004
#define W 1007
using namespace std;
long long a[N];
int main()
{
int k,c[W],m=1,s,count=0;
cin>>k;
while(k--){
int n,i,j,q,x=1;
cin>>n;
count++;
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n-2;i++){
for(j=i+1;j<=n-1;j++){
if(a[i]>a[j]){
for(q=j+1;q<=n;q++){
if(a[i]<a[q]){
c[m++]=count;
x=0;
// cout<<count<<":"<<endl;
break;
}
else continue;
}
break;
}
}
for(int r=i+1;;r++){
if(a[i]>a[r])
i++;
else break;
}
if(x==0)break;
}
}
cout<<m-1<<endl;
for(s=1;s<m;s++){
cout<<c[s]<<endl;
}
}
//以上这就是超时代码,比赛时想到的
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5+7,INF = 0x3f3f3f3f;
int k,n,Max;
int a[N],max_bh[N];
vector<int> ans;
int main(){
scanf("%d",&k);
for(int i=1;i<=k;i++){
scanf("%d",&n);
for(int j=1;j<=n;j++)
scanf("%d",&a[j]);
for(int j=n;j>0;j--)
if(a[j]>Max){
max_bh[j]=a[j];
Max=a[j];}
else max_bh[j] = Max;
set<int> st;
Max = 0;
for(int j=1;j <= n;++j){
if(!st.size() || a[j] == max_bh[j])
{ st.insert(a[j]);
continue; }
auto pos = st.upper_bound(a[j]);
if(pos != st.end()){
if(*pos < max_bh[j]){
ans.push_back(i); break; } }
st.insert(a[j]); } }
printf("%d\n",ans.size());
for(int i=0;i < ans.size(); ++i)
printf("%d\n",ans[i]);
return 0; }