QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#550468 | #8332. Two in One | dfghjjj | RE | 0ms | 0kb | C++20 | 4.7kb | 2024-09-07 13:00:59 | 2024-09-07 13:01:01 |
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define re register
#define il inline
#define pii pair<int,int>
#define x first
#define y second
#define gc getchar()
#define rd read()
#define debug() puts("------------")
namespace yzqwq{
il int read(){
int x=0,f=1;char ch=gc;
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=gc;}
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=gc;
return x*f;
}
il int qmi(int a,int b,int p){
int ans=1;
while(b){
if(b&1) ans=ans*a%p;
a=a*a%p,b>>=1;
}
return ans;
}
// il auto max(auto a,auto b){return (a>b?a:b);}
// il auto min(auto a,auto b){return (a<b?a:b);}
il int gcd(int a,int b){
if(!b) return a;
return gcd(b,a%b);
}
il int lcm(int a,int b){
return a/gcd(a,b)*b;
}
il void exgcd(int a,int b,int &x,int &y){
if(!b) return x=1,y=0,void(0);
exgcd(b,a%b,x,y);
int t=x;
x=y,y=t-a/b*x;
return ;
}
il int F(int n,int a,int b,int c){
//sum{|_ (ai+b)/c _| i:0~n}
if(!n) return b/c;
if(!a) return (n+1)*(b/c);
if(a>=c||b>=c){
int x=a/b,y=b/c;
return n*(n+1)/2*x+(n+1)*y+F(n,a%c,b%c,c);
}
int m=(a*n+b)/c;
return n*m+F(m-1,c,c-b+1,a);
}
struct lb{
int d[64];
il void print(){
for(re int i=0;i<63;++i)
if(d[i]) printf("%lld:%lld\n",i,d[i]);
return ;
}
lb(){memset(d,0,sizeof(d));}
il void operator +=(int x){
for(re int i=62;i>=0;--i){
if(!(x&(1ll<<i))) continue;
if(d[i]) x^=d[i];
else return d[i]=x,void(0);
}
return ;
}
int& operator [](int x){
return d[x];
}
il void operator +=(lb &x){
for(re int i=62;i>=0;--i)
if(x[i]) *this+=x[i];
return ;
}
il friend lb operator +(lb &x,lb &y){
lb z=x;
for(re int i=62;i>=0;--i)
if(y[i]) z+=y[i];
return z;
}
il int Max_calc(){
int ans=0;
for(re int i=62;i>=0;--i)
if((ans^d[i])>ans) ans^=d[i];
return ans;
}
};
mt19937 rnd(time(0));
}
using namespace yzqwq;
const int N=500000+10;
int n,a[N];
int cnt[N];
int b[N];
il bool cmp(int a,int b){
return cnt[a]>cnt[b];
}
il void solve(){
n=rd;
for(re int i=1;i<=n;++i) a[i]=rd,cnt[i]=0;
int Max=0;pii ans={0,0};
pii ans2={0,0};
if(n<=100){
for(re int l=1;l<=n;++l){
for(re int i=1;i<=n;++i) cnt[i]=0;
for(re int r=l;r<=n;++r){
++cnt[a[r]];
for(re int i=1;i<=n;++i){
int w=(cnt[i]|cnt[a[r]]);
if(w>Max){
Max=w,ans={l,r},ans2={a[r],i};
}
}
}
}
cout<<Max<<"\n";
// cout<<ans.x<<" "<<ans.y<<"\n";
// cout<<ans2.x<<" "<<ans2.y<<"\n";
return ;
}
if(n<=1000){
int l=1;
for(re int r=l;r<=n;++r){
++cnt[a[r]];
for(re int i=1;i<=n;++i){
int w=(cnt[i]|cnt[a[r]]);
if(w>Max){
Max=w,ans={l,r},ans2={a[r],i};
}
}
}
cout<<Max<<"\n";
// cout<<ans.x<<" "<<ans.y<<"\n";
// cout<<ans2.x<<" "<<ans2.y<<"\n";
return ;
}
int l=1;int idx=0;
for(re int r=l;r<=n;++r){
++cnt[a[r]];
if(Max<cnt[a[r]]){
Max=cnt[a[r]],ans={l,r},ans2={a[r],a[r]};
}
bool fl=0;
for(re int i=1;i<=idx;++i){
int w=(cnt[a[r]]|cnt[b[i]]);
fl|=(b[i]==a[r]);
if(w>Max){
Max=w,ans={l,r},ans2={a[r],b[i]};
}
}
if(!fl) b[++idx]=a[r];
sort(b+1,b+idx+1,cmp);
idx=min(idx,20*1ll);
// for(re int i=1;i<=n;++i){
// int w=(cnt[a[i]]|cnt[a[r]]);
// if(w>Max||(w==Max&&ans.x==1&&l==1)){
// Max=w;
// ans={l,r};
// ans2={i,a[r]};
// }
// }
}
cout<<Max<<"\n";
// cout<<ans.x<<" "<<ans.y<<"\n";
// cout<<ans2.x<<" "<<ans2.y<<"\n";
return ;
}
signed main(){
freopen("ttheal.in","r",stdin);
freopen("ttheal.out","w",stdout);
int t=rd;while(t--)
solve();
return 0;
}
詳細信息
Test #1:
score: 0
Dangerous Syscalls
input:
1 7 1 2 3 4 3 2 1