ACDream - Dynamic Inversions II
生活随笔
收集整理的這篇文章主要介紹了
ACDream - Dynamic Inversions II
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先上題目:
A?-?Dynamic Inversions II
Time Limit:?6000/3000MS (Java/Others)?Memory Limit:?128000/64000KB (Java/Others) SubmitStatusProblem Description
給出N個數a[1],a[2] ... a[N],a[1]...a[N]是1-N的一個排列,即1 <= a[i] <= N且每個數都不相同。有M個操作,每個操作給出x,y兩個數,你將a[x],a[y]交換,然后求交換后數組的逆序對個數 % 2。逆序對的意思是1 <= i < j <= N 且a[i] > a[j].
Input
多組數據,每組數據:
兩個數N,M,接下來一行有N個數a[1]... a[N]
最后M行每行兩個數x,y
1 <= N,M <= 10^5, 1 <= x < y <= N,1 <= a[i] <= N
Output
對于每組數據,輸出M + 1行,第一行是開始時的逆序對數目 % 2,接下去M行每行一個數,表示這次修改后的逆序對數目 % 2Sample Input
2 1 1 2 1 2Sample Output
0 1因為結果要求的是逆序對的二進制最低位是多少,所以我們需要分析一下變換了位置以后的就變化情況。
先求一次逆序對。 再分析情況,發現逆序對的奇偶性變化只有兩個數之間的數會帶來變化。
① ······大····小······ --> ······小····大······
中間的數有三種情況:a.比大的大 b.比大的小,比小的大 c.比小的小
對于三種情況逆序對的變化情況:
| ? | ? | 小 | ? | 大 | ? |
| 大 | 減少 | ? | 減少 | ? | 增加 |
| 小 | 增加 | ? | 減少 | ? | 減少 |
② ······小····大······ --> ······大····小······
中間的數有三種情況:a.比大的大 b.比大的小,比小的大 c.比小的小
對于三種情況逆序對的變化情況:
| ? | ? | 小 | ? | 大 | ? |
| 大 | 增加 | ? | 增加 | ? | 減少 |
| 小 | 減少 | ? | 增加 | ? | 增加 |
③ ······a····a······ -->不變
所以我們需要做的是判斷交換的兩個數是不是相等,如果是相等就不變化奇偶性,否則奇偶性變化一次。
上代碼:
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
?
轉載于:https://www.cnblogs.com/sineatos/p/3867592.html
總結
以上是生活随笔為你收集整理的ACDream - Dynamic Inversions II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金融业(互联网金融)创新---我的实地考
- 下一篇: 上海立信会计学院_上海立信会计学院分数线