博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NOIP2013]火柴排队
阅读量:4461 次
发布时间:2019-06-08

本文共 1485 字,大约阅读时间需要 4 分钟。

【题目描述】

思路{

  首先贪心地想,应该是小怼小,大怼大。即A(i)<=A(i+1),B(i)<=B(i+1),这是排序不等式
  证明它,我们需要使用和式恒等变换(感谢朱峰昊(朱哥)的大力支持){
    设A(i)<=A(i+1),B(i)<=B(i+1),证明:
      ∑A(i)*B(i)(顺序和)
      >=∑A(i)*B( j(i) )(乱序和)
      >=∑A(i)*B(n-i+1)(逆序和)
      其中j(i)为一个任意的对应关系。
      设S[i]=∑B(k)(k<=i),S'[i]=∑B(  j(k) );易知,S[i]<=S‘[i];又因为A(i)<=A(i+1)
      所以S[i]*(A[i+1]-A[i])>=S’[i]*(A[i+1]-A[i])
      ∑A(i)*B(i)=∑S[i]*(A[i+1]-A[i])(i<=n-1)+A[n]*B[n]
                   >=∑S‘[i]*(A[i+1]-A[i])(i<=n-1)+A[n]*B[n]
                   =∑A(i)*B( j(i) );
                             同理证得右边也成立,问题得证。
          }
  问题解的min为∑(A[i]-B[i])^2=∑A[i]^2+∑B[i]^2-2∑A(i)*B(i).
  前两项是恒定的,故后一项取最大即可,即为顺序和。
        可以统计出每个位置当前点所对应的下标pos[i]。首状态是位置依次递增的。
        而末状态为pos[i],pos[i+1]......pos[n];
        要统计多少步,不妨反过来考虑。
        由于交换两个数只改变这两个数所成的逆序对。
        反过来考虑,就是把一个存在逆序对的数组变成一个非严格上升的子序列,
        且每次交换操作只改变一对。
        那么,只需要用树状数组统计pos下标的逆序对就可以了。

}

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #define RG register15 #define LL long long16 #define dd double17 #define maxx 20000118 #define rs (o*2+1)19 #define ls (o*2)20 #define mid ((L+R)/2)21 #define MOD 9999999722 #define low(k) (k)&(-k)23 using namespace std;24 LL n;LL ans;25 struct matrix{26 LL num,pos;27 matrix () {}28 matrix(int nn,int pp):num(nn),pos(pp) {}29 };30 bool comp(const matrix & a,const matrix & b){ return a.num

 

转载于:https://www.cnblogs.com/zzmmm/p/6898454.html

你可能感兴趣的文章
大数据技术之Hbase
查看>>
Artefact Animator 制作动画
查看>>
Java线程并发库之--线程同步工具之CyclicBarrier
查看>>
Java基础学习笔记2
查看>>
C++ algorithm 里的sort函数应用
查看>>
AOP 怎么理解?
查看>>
静态成员数据和静态成员函数
查看>>
操作系统复习笔记——进程线程模型(1)
查看>>
Entity Framework分页扩展
查看>>
40 进程池 回调函数 线程 thrrading模块
查看>>
Appium 设置手机连接方式
查看>>
基于AFNetworking3.0的网络封装
查看>>
栈的实现(JAVA)
查看>>
android.graphics.Matrix
查看>>
Linux安装MySQL的两种方法
查看>>
MySql修改数据表的基本操作(DDL操作)
查看>>
List Leaves
查看>>
51Nod 1596 搬货物
查看>>
java 中方法的重写
查看>>
idea中git标签(tag)的创建与使用
查看>>