各位柯南,帮我破破案:
众所周知,一个代码=A+B RE了,当且仅当:A RE 了或 B RE了。
然而:我先后提交了这样三份代码,得出了诡异的结论:
一、Code=A+B,RE了
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n,m,a[N];
int lst[N];
int c[N];
vector<int> ll[N],id[N];
int ans[N];
int lowbit(int x){return x&(-x);}
int add(int x,int y){
for(;x<=n;x+=lowbit(x)) c[x]+=y;
}
int ask(int x){
int res=0;
for(;x;x-=lowbit(x)) res+=c[x];
return res;
}
int main(){
memset(lst,-1,sizeof(lst));
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=1;i<=m;i++){
int l,r;scanf("%d%d",&l,&r);
ll[r].push_back(l);
id[r].push_back(i);
}
for(int r=1;r<=n;r++){
add(r,1);
}
for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
return 0;
}
二、Code=A,WA了
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n,m,a[N];
int lst[N];
int c[N];
vector<int> ll[N],id[N];
int ans[N];
int lowbit(int x){return x&(-x);}
int add(int x,int y){
for(;x<=n;x+=lowbit(x)) c[x]+=y;
}
int ask(int x){
int res=0;
for(;x;x-=lowbit(x)) res+=c[x];
return res;
}
int main(){
memset(lst,-1,sizeof(lst));
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=1;i<=m;i++){
int l,r;scanf("%d%d",&l,&r);
ll[r].push_back(l);
id[r].push_back(i);
}
for(int r=1;r<=n;r++){
}
for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
return 0;
}
三、Code=B,WA了
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n,m,a[N];
int lst[N];
int c[N];
vector<int> ll[N],id[N];
int ans[N];
int lowbit(int x){return x&(-x);}
int add(int x,int y){
for(;x<=n;x+=lowbit(x)) c[x]+=y;
}
int ask(int x){
int res=0;
for(;x;x-=lowbit(x)) res+=c[x];
return res;
}
int main(){
for(int r=1;r<=n;r++){
add(r,1);
}
return 0;
}
综上所述,导出两条结论:
一、洛谷炸了
二、欧几里得傻了