逝者如斯夫,不捨晝夜!
葉良辰認為,他的壽命是無限長的,而且每天都會進步。
葉良辰的生命的第一天,他有1點能力值。第二天,有2點。第n天,就有n點。也就是s[i]=i
但是調皮的小a使用時光機,告訴他第x天和第y天,就可以任意交換某兩天的能力值。即s[x]<-->s[y]
小a玩啊玩,終於玩膩了。
葉良辰:小a你給我等著,我有100種辦法讓你生不如死。除非能在1秒鐘之內告知有多少對「異常對」。也就是說,最後的能力值序列,有多少對的兩天x,y,其中xs[y]?
小a:我好怕怕啊。
於是找到了你。
輸入格式:
第一行乙個整數k,表示小a玩了多少次時光機
接下來k行,x_i,y_i,表示將s[x_i]與s[y_i]進行交換
輸出格式:
有多少「異常對」
輸入樣例#1:
24 21 4
輸出樣例#1:
4
樣例說明
最開始是1 2 3 4 5 6...
然後是 1 4 3 2 5 6...
然後是 2 4 3 1 5 6...
符合的對是[1 4] [2 3] [2 4] [3 4]
對於30%的資料,x_i,y_i <= 2000
對於70%的資料, x_i,y_i <= 100000
對於100%的資料, x_i.y_i <= 2^31-1 k<=100000
將連續的沒有交換的壓縮成乙個點
樹狀陣列求逆序對
#include#include#define n 100001
using
namespace
std;
int hashh[n<<1
];struct
data
g[n];
int dy2[n<<1
];struct
node
e[n<<1
];int cnt,c[n<<1
];void add(int x,inty)}
int query(int
x)
return
sum;
}int
main()
sort(hashh+1,hashh+n*2+1
);
int tot=unique(hashh+1,hashh+n*2+1)-(hashh+1
); hashh[tot+1]=hashh[tot]+1
;
for(int i=1;i<=tot;i++)
else
}inta,b;
for(int i=1;i<=n;i++)
long
long ans=0
;
for(int i=cnt;i;i--)
printf(
"%lld
",ans);
}
洛谷2448 無盡的生命
題目 分析 首先離散化,然後樹狀陣列求所有操作過的數產生的逆序對,再求每個操作過的數與沒操作過的數產生的逆序對,因為原始序列有序,所以很方便。include include include include using namespace std const int tmax 200005 struc...
無盡的生命 洛谷p2448
逝者如斯夫,不捨晝夜!葉良辰認為,他的壽命是無限長的,而且每天都會進步。葉良辰的生命的第一天,他有1點能力值。第二天,有2點。第n天,就有n點。也就是s i i 但是調皮的小a使用時光機,告訴他第x天和第y天,就可以任意交換某兩天的能力值。即s x s y 小a玩啊玩,終於玩膩了。葉良辰 小a你給我...
洛谷P2448 無盡的生命 樹狀陣列
給出231 12 1 231 1範圍的1 n 1 n1 n的數列,然後有不超過k 1 e5 k leq1e5 k 1e 5次交換,求問最終的逆序對的個數是多少。被交換的值不超過2k2k 2k個,然後再考慮中間一段連續的數對逆序對的貢獻,把他們看作是同乙個點。樹狀陣列維護即可。includeusing...