QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#135475 | #6631. Maximum Bitwise OR | PhantomThreshold | WA | 1569ms | 7704kb | C++20 | 2.7kb | 2023-08-05 16:00:47 | 2023-08-05 16:00:51 |
Judging History
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'