zoukankan      html  css  js  c++  java
  • bzoj2789

    这种题目肯定是先把一个当做标准串
    根据标准串得出一个初始串是怎么排列的,然后求逆序对数就可以了
    但是因为有重复,我们不知道标准串中的一个数到底是由原来哪个字母交换来的
    但是我们可以猜,不难贪心得到
    对于标准串中某一个字符,它第一次出现的位置是有原串第一次出现的位置交换来的,
    第二次是第二次,以此类推……
    虽然不知道怎么证明但感觉就是对的

     1 var c:array[0..1000010] of longint;
     2     b:array[1..26] of longint;
     3     q:array[1..26,0..1000000] of longint;
     4     i,x,n:longint;
     5     ans:int64;
     6     ch:char;
     7 
     8 function lowbit(x:longint):longint;
     9   begin
    10     exit(x and (-x));
    11   end;
    12 
    13 procedure add(x:longint);
    14   begin
    15     while x<=n do
    16     begin
    17       inc(c[x]);
    18       x:=x+lowbit(x);
    19     end;
    20   end;
    21 
    22 function ask(x:longint):int64;
    23   begin
    24     ask:=0;
    25     while x>0 do
    26     begin
    27       ask:=ask+c[x];
    28       x:=x-lowbit(x);
    29     end;
    30   end;
    31 
    32 begin
    33   readln(n);
    34   for i:=1 to n do
    35   begin
    36     read(ch);
    37     x:=ord(ch)-64;
    38     inc(b[x]);
    39     q[x,b[x]]:=i;
    40   end;
    41   readln;
    42   fillchar(b,sizeof(b),0);
    43   for i:=1 to n do
    44   begin
    45     read(ch);
    46     x:=ord(ch)-64;
    47     inc(b[x]);
    48     x:=q[x,b[x]];
    49     ans:=ans+ask(n)-ask(x-1);
    50     add(x);
    51   end;
    52   writeln(ans);
    53 end.
    View Code
  • 相关阅读:
    lipo命令
    Eclipse安装ADT插件
    编译vo-aacenc遇到的问题
    双MIC安卓手机录音问题
    天天动听MP3解码器性能提升50%
    Sublime Text 2结合VS2010配置C C++编译
    讯飞语音语义接口测试
    讯飞语音接口注册
    iOS阶段学习第31天笔记(UINavigationBar介绍)
    iOS App上架AppStore 会遇到的坑
  • 原文地址:https://www.cnblogs.com/phile/p/4473078.html
Copyright © 2011-2022 走看看