QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#135475#6631. Maximum Bitwise ORPhantomThresholdWA 1569ms7704kbC++202.7kb2023-08-05 16:00:472023-08-05 16:00:51

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-08-05 16:00:51]
  • 评测
  • 测评结果:WA
  • 用时:1569ms
  • 内存:7704kb
  • [2023-08-05 16:00:47]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

typedef pair<int,int> pii;

inline int lowbit(int x){
	return x&(-x);
}

const int maxL=18;
const int maxn=100000;
int T,n,Q;
int dp[maxL+5][maxn+5];
int LG[(1<<maxL)+5];

struct osc{
	int l,r,id,ans1,ans2,len;
}q[maxn+50];
int a[maxn+50];

void build(){
	for (int i=1;i<=n;i++) dp[0][i]=a[i];
	for (int j=1;j<maxL;j++){
		for (int i=1;i+(1<<j)<=n+1;i++){
			dp[j][i]=dp[j-1][i]|dp[j-1][i+(1<<(j-1))];
		}
	}
	
	for (int i=0;i<maxL;i++){
		for (int j=1<<i;j<1<<(i+1);j++) LG[j]=i;
	}
}
int query(int l,int r){
	int L=LG[r-l+1];
	int ans=dp[L][l]|dp[L][r-(1<<L)+1];
	return ans;
}
void update(int &x,int y){
	x=max(x,y);
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin >> T;
	for (;T--;){
		cin >> n >> Q;
		for (int i=1;i<=n;i++) cin >> a[i];
		
		build();
		
		vector<vector<pii>> pre(n+2);
		pre[0].emplace_back(0,1);
		for (int i=1;i<=n;i++){
			pre[i].emplace_back(0LL,i+1);
			for (auto [x,ind]:pre[i-1]){
				x=x|a[i];
				if (x==pre[i].back().first) continue;
				pre[i].emplace_back(x,ind);
			}
		}
		vector<vector<pii>> suf(n+2);
		suf[n+1].emplace_back(0,n);
		for (int i=n;i>=1;i--){
			suf[i].emplace_back(0LL,i-1);
			for (auto [x,ind]:suf[i+1]){
				x=x|a[i];
				if (x==suf[i].back().first) continue;
				suf[i].emplace_back(x,ind);
			}
		}
		/*
		cerr << "-----------------" << endl;
		for (int i=1;i<=n;i++){
			for (auto [x,ind]:pre[i]) cerr << "(" << x << "," << ind << ") ";
			cerr << endl;
		} 
		cerr << "-----------------" << endl;
		for (int i=1;i<=n;i++){
			for (auto [x,ind]:suf[i]) cerr << "(" << x << "," << ind << ") ";
			cerr << endl;
		} 
		*/
		vector<vector<int>> List(n+2);
		for (auto &e:List) e.resize(35);
		
		for (int i=1;i<=n;i++){
			for (auto [vl,l]:pre[i-1]){
				for (auto [vr,r]:suf[i+1]){
					int v=vl|vr;
					int bit=lowbit(v+1);
					if (bit<=a[i]) v|=a[i]^(a[i]-bit);
					int bit2=lowbit(v+1);
					bit2=31-__builtin_clz(bit2);
					update(List[r][bit2],l);
				}
			}
		}
		vector<vector<int>> qset(n+2);
		for (int i=1;i<=Q;i++){
			cin >> q[i].l >> q[i].r;
			q[i].id=i;
			int tmp=query(q[i].l,q[i].r);
			int L=31-__builtin_clz(tmp)+1;
			q[i].ans1=(1<<L)-1;
			q[i].len=L;
			
			if (tmp==q[i].ans1) q[i].ans2=0;
			else{
				q[i].ans2=2;
				qset[q[i].r].push_back(i);
			}
		}
		vector<int> tmp(32);
		for (int r=1;r<=n;r++){
			for (int j=0;j<32;j++) update(tmp[j],List[r][j]);
			for (auto qid:qset[r]){
				for (int j=q[r].len;j<32;j++){
					if (q[qid].l<=tmp[j]) q[qid].ans2=1;
				}
			}
		}
		for (int i=1;i<=Q;i++){
			cout << q[i].ans1 << " " << q[i].ans2 << "\n";
		}
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 7584kb

input:

1
3 2
10 10 5
1 2
1 3

output:

15 2
15 0

result:

ok 4 number(s): "15 2 15 0"

Test #2:

score: 0
Accepted
time: 1569ms
memory: 5600kb

input:

100000
1 1
924704060
1 1
1 1
149840457
1 1
1 1
515267304
1 1
1 1
635378394
1 1
1 1
416239424
1 1
1 1
960156404
1 1
1 1
431278082
1 1
1 1
629009153
1 1
1 1
140374311
1 1
1 1
245014761
1 1
1 1
445512399
1 1
1 1
43894730
1 1
1 1
129731646
1 1
1 1
711065534
1 1
1 1
322643984
1 1
1 1
482420443
1 1
1 1
20...

output:

1073741823 2
268435455 2
536870911 2
1073741823 2
536870911 2
1073741823 2
536870911 2
1073741823 2
268435455 2
268435455 2
536870911 2
67108863 2
134217727 2
1073741823 2
536870911 2
536870911 2
268435455 2
536870911 2
536870911 2
536870911 2
268435455 2
268435455 2
1073741823 2
16777215 2
10737418...

result:

ok 200000 numbers

Test #3:

score: 0
Accepted
time: 804ms
memory: 7704kb

input:

50000
2 2
924896435 917026400
1 2
1 2
2 2
322948517 499114106
1 2
2 2
2 2
152908571 242548777
1 1
1 2
2 2
636974385 763173214
1 2
1 1
2 2
164965132 862298613
1 1
1 2
2 2
315078033 401694789
1 2
1 2
2 2
961358343 969300127
2 2
1 2
2 2
500628228 28065329
1 2
1 2
2 2
862229381 863649944
1 2
2 2
2 2
541...

output:

1073741823 2
1073741823 2
536870911 2
536870911 2
268435455 2
268435455 2
1073741823 2
1073741823 2
268435455 2
1073741823 2
536870911 2
536870911 2
1073741823 2
1073741823 2
536870911 2
536870911 2
1073741823 2
1073741823 2
1073741823 2
268435455 2
536870911 2
536870911 2
1073741823 2
1073741823 2
...

result:

ok 200000 numbers

Test #4:

score: -100
Wrong Answer
time: 540ms
memory: 7588kb

input:

33333
3 3
925088809 339284112 289540728
3 3
1 3
1 1
3 3
422399522 892365243 216341776
3 3
3 3
1 2
3 3
668932010 837523227 840095874
1 3
1 3
3 3
3 3
731584574 357877180 359063739
1 1
1 1
3 3
3 3
463358343 833924976 847087403
2 3
3 3
1 2
3 3
377154649 772000701 656357011
2 3
1 2
2 3
3 3
977492169 5540...

output:

536870911 2
1073741823 2
1073741823 2
268435455 2
268435455 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
536870911 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
1073741823 2
67108863 2
1073741823 2
1073741...

result:

wrong answer 4510th numbers differ - expected: '2', found: '1'