建设网站类的论文,百度有哪些产品,网站商城怎么做,wordpress功能修改题意 第一行为一个正整数n#xff0c;表示小朋友的数量#xff1b;第二行包含n个由空格分隔的正整数h1,h2,…,hn#xff0c;依次表示初始队列中小朋友的身高#xff1b;第三行为一个正整数m#xff0c;表示交换操作的次数#xff1b;以下m行每行包含两个正整数ai和bi表示小朋友的数量第二行包含n个由空格分隔的正整数h1,h2,…,hn依次表示初始队列中小朋友的身高第三行为一个正整数m表示交换操作的次数以下m行每行包含两个正整数ai和bi表示交换位置ai与位置bi的小朋友。输出文件共m行第i行一个正整数表示交换操作i结束后序列的杂乱程度逆序对数。 1≤m≤2*10^31≤n≤2*1041≤hi≤109ai≠bi1≤ai,bi≤n。 题解 难受PE看成RE下了数据手测20组发现没有问题最后发现多了一个endl 然后有重复但并不用去重。 分块做法首先离散化分块对于每块建立一个树状数组保存这个块中的所有元素然后对于每个询问(x,y) (xy) 两侧的数是没有影响的区间(x,y)的数a[i]讨论如下a[i]a[x] --ansa[i]a[x] ansa[i]a[y] ansa[i]a[y] --ans然后对于块中的树状数组处理块外的暴力 然后附上分块VSCDQ上面的是分块 1 #includeiostream2 #includecstring3 #includecstdio4 #includecmath5 #includealgorithm6 using namespace std;7 const int N21000;8 int n,a[N],b[N],block[N],Block,size[N],L[N],R[N],m,tr[500][N],ans;9 int lowbit(int x){
10 return x-x;
11 }
12 void add(int id,int x,int w){
13 for(int ix;in;ilowbit(i)){
14 tr[id][i]w;
15 }
16 }
17 int getsum(int id,int x){
18 int tmp0;
19 for(int ix;i;i-lowbit(i)){
20 tmptr[id][i];
21 }
22 return tmp;
23 }
24 int main(){
25 // freopen(20.in,r,stdin);
26 // freopen(xdx.out,w,stdout);
27 scanf(%d,n);
28 Blocksqrt(n);
29 for(int i1;in;i){
30 scanf(%d,a[i]);
31 b[i]a[i];
32 block[i](i-1)/Block1;
33 size[block[i]];
34 if(!L[block[i]])L[block[i]]i;
35 R[block[i]]i;
36 }
37 sort(b1,b1n);
38 int totunique(b1,b1n)-b-1;
39 for(int i1;in;i){
40 a[i]lower_bound(b1,b1tot,a[i])-b;
41 }
42 // coutendl;
43 for(int i1;in;i){
44 add(block[i],a[i],1);
45 }
46 for(int in;i1;i--){
47 add(0,a[i],1);
48 ansgetsum(0,a[i]-1);
49 }
50 scanf(%d,m);
51 printf(%d\n,ans);
52 for(int i1;im;i){
53 int x,y;
54 scanf(%d%d,x,y);
55 if(xy)swap(x,y);
56 if(block[x]1block[y]){
57 for(int ix1;iy-1;i){
58 if(a[x]a[i])ans--;if(a[x]a[i])ans;
59 if(a[y]a[i])ans--;if(a[y]a[i])ans;
60 }
61 }
62 else{
63 for(int iblock[x]1;iblock[y]-1;i){
64 ans-getsum(i,a[x]-1)size[i]-getsum(i,a[y]);
65 ansgetsum(i,a[y]-1)size[i]-getsum(i,a[x]);
66 }
67 for(int ix1;iR[block[x]];i){
68 if(a[x]a[i])ans--;if(a[x]a[i])ans;
69 if(a[y]a[i])ans--;if(a[y]a[i])ans;
70 }
71 for(int iL[block[y]];iy-1;i){
72 if(a[x]a[i])ans--;if(a[x]a[i])ans;
73 if(a[y]a[i])ans--;if(a[y]a[i])ans;
74 }
75 }
76 if(a[x]a[y])ans--;
77 if(a[x]a[y])ans;
78 add(block[x],a[x],-1);add(block[x],a[y],1);
79 add(block[y],a[y],-1);add(block[y],a[x],1);
80 swap(a[x],a[y]);
81 printf(%d\n,ans);
82 }
83 return 0;
84 } 转载于:https://www.cnblogs.com/Xu-daxia/p/9495130.html