QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#550468#8332. Two in OnedfghjjjRE 0ms0kbC++204.7kb2024-09-07 13:00:592024-09-07 13:01:01

Judging History

你现在查看的是最新测评结果

  • [2024-09-07 13:01:01]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2024-09-07 13:00:59]
  • 提交

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;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Dangerous Syscalls

input:

1
7
1 2 3 4 3 2 1

output:


result: