rt
赛时因为没看懂题目,写了个判断逆序对个数
本来想骗点分,但是莫名其妙RE了
求大佬指出下面这份代码为啥会RE
/bx/bx/bx
源代码 复制
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define int long long
int tree[100005],lian[100005],a[100005],x[100005],y[100005];
int upd(int now,int pos){
for(int i =pos;i<100005;i+=lowbit(i))tree[i]+=now;
}int query(int pos){
int res =0 ;
for(int i =pos;i>0;i-=lowbit(i))res+=tree[i];
return res;
}//普通的树状数组板子
signed main(){
int n,h = 0;
cin>> n;
for(int i =1;i<n;i++){
cin>> x[i] >> y[i];
}for(int i =1;i<n;i++){
if(i == 1){
if(x[i] == x[i+1] or x[i] == y[i+1]){
a[++h] = y[i];
a[++h] = x[i];
}else{
a[++h] = x[i];
a[++h] = y[i];
}
}else{
if(a[h] == x[i])a[++h] = y[i];
else a[++h] = x[i];
}
}
for(int i =1;i<=h;i++)lian[a[i]] = i;
//把链求出
int ans =0 ;
for(int i=1;i<=n;i++){
ans+=query(n)-query(lian[i]);
upd(1,lian[i]);
//计算逆序对个数
}cout << ans << endl;
}
(注:我知道这份代码显然是错误的,但我想知道为啥会全RE