只是记录一下vector的用法
v.push_back(x)加入x
v.pop_back()弹出最后一个元素
v[x]=v.back(),v.pop_back()删除x,但是会打乱vector顺序
vector的第i个元素可以直接用v[i]

#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> #include<algorithm> #include<vector> using namespace std; const int maxn=1000010,inf=1e9; int n,m,L; int a[maxn],b[maxn]; vector<int>v[maxn]; inline void read(int &k) { int f=1;k=0;char c=getchar(); while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar(); while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar(); k*=f; } int main() { read(n); for(int i=1;i<=n;i++)read(a[i]),v[a[i]].push_back(i); read(m); for(int i=1;i<=m;i++) { read(L); for(int j=1;j<=L;j++)read(b[j]); int now=0,flag=0; for(int j=1;j<=L;j++) { int l=0,r=v[b[j]].size()-1; if(r<0){puts("NIE");flag=1;break;} while(l<r) { int mid=(l+r)>>1; if(v[b[j]][mid]>now)r=mid; else l=mid+1; } if(v[b[j]][l]>now)now=v[b[j]][l]; else {puts("NIE");flag=1;break;} } if(!flag)puts("TAK"); } }