日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ACDream - Dynamic Inversions II

發(fā)布時(shí)間:2024/9/5 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACDream - Dynamic Inversions II 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先上題目:

A?-?Dynamic Inversions II

Time Limit:?6000/3000MS (Java/Others)?Memory Limit:?128000/64000KB (Java/Others) SubmitStatus

Problem Description

給出N個(gè)數(shù)a[1],a[2] ... a[N],a[1]...a[N]是1-N的一個(gè)排列,即1 <= a[i] <= N且每個(gè)數(shù)都不相同。有M個(gè)操作,每個(gè)操作給出x,y兩個(gè)數(shù),你將a[x],a[y]交換,然后求交換后數(shù)組的逆序?qū)€(gè)數(shù) % 2。
逆序?qū)Φ囊馑际? <= i < j <= N 且a[i] > a[j].

Input

多組數(shù)據(jù),每組數(shù)據(jù):

兩個(gè)數(shù)N,M,接下來一行有N個(gè)數(shù)a[1]... a[N]

最后M行每行兩個(gè)數(shù)x,y

1 <= N,M <= 10^5, 1 <= x < y <= N,1 <= a[i] <= N

Output

對(duì)于每組數(shù)據(jù),輸出M + 1行,第一行是開始時(shí)的逆序?qū)?shù)目 % 2,接下去M行每行一個(gè)數(shù),表示這次修改后的逆序?qū)?shù)目 % 2

Sample Input

2 1 1 2 1 2

Sample Output

0 1

  因?yàn)榻Y(jié)果要求的是逆序?qū)Φ亩M(jìn)制最低位是多少,所以我們需要分析一下變換了位置以后的就變化情況。
  先求一次逆序?qū)Α?  再分析情況,發(fā)現(xiàn)逆序?qū)Φ钠媾夹宰兓挥袃蓚€(gè)數(shù)之間的數(shù)會(huì)帶來變化。
①    ······大····小······    -->  ······小····大······
  中間的數(shù)有三種情況:a.比大的大 b.比大的小,比小的大 c.比小的小
  對(duì)于三種情況逆序?qū)Φ淖兓闆r:
????
減少?減少?增加
增加?減少?減少
  其中減少和增加的量是相等的,那就是說這樣變化的結(jié)果是偶數(shù)對(duì)-1對(duì)。

②    ······小····大······    -->  ······大····小······
  中間的數(shù)有三種情況:a.比大的大 b.比大的小,比小的大 c.比小的小
  對(duì)于三種情況逆序?qū)Φ淖兓闆r:
????
增加?增加?減少
減少?增加?增加
  其中減少和增加的量是相等的,那就是說這樣變化的結(jié)果是偶數(shù)對(duì)+1對(duì)。

③    ······a····a······    -->不變

  所以我們需要做的是判斷交換的兩個(gè)數(shù)是不是相等,如果是相等就不變化奇偶性,否則奇偶性變化一次。

上代碼:

1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #define lowbit(x) (x & (-x)) 6 #define MAX 100002 7 #define LL long long 8 using namespace std; 9 10 int n,m; 11 12 int c[MAX],a[MAX]; 13 14 void add(int x){ 15 for(;x<=n;x+=lowbit(x)) c[x]++; 16 } 17 18 LL sum(int x){ 19 LL ans=0; 20 for(;x>0;x-=lowbit(x)) ans+=c[x]; 21 return ans; 22 } 23 24 int main() 25 { 26 int x,y; 27 LL s; 28 while(scanf("%d %d",&n,&m)!=EOF){ 29 memset(c,0,sizeof(c)); 30 s=0; 31 for(int i=1;i<=n;i++){ 32 scanf("%d",&a[i]); 33 add(a[i]); 34 s+=sum(n)-sum(a[i]); 35 } 36 bool f=s&1; 37 if(f) puts("1"); 38 else puts("0"); 39 for(int i=0;i<m;i++){ 40 scanf("%d %d",&x,&y); 41 if(x!=y && a[x]!=a[y]) f=f^1; 42 swap(a[x],a[y]); 43 if(f) puts("1"); 44 else puts("0"); 45 } 46 } 47 return 0; 48 } Dynamic InversionsII

?






轉(zhuǎn)載于:https://www.cnblogs.com/sineatos/p/3867592.html

總結(jié)

以上是生活随笔為你收集整理的ACDream - Dynamic Inversions II的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。