朗格拉日计算

Time Limit: 10 Sec  Memory Limit: 128 MB

Description

  

Input

  

Output

  仅一行一个整数表示答案。

Sample Input

  5
  3 2 5 4 1

Sample Output

  4

HINT

  

Main idea

  将一个排列围成一个环,每个点有一个值a[i],若顺时针三个点A、B、C 满足 a[A]<a[B]<a[C] 则可以统计答案,询问答案。

Solution

  我们不考虑环,从序列考虑,显然可以统计的就是类似这种:123、231、312这个样子的。

  我们考虑容斥,显然123这种是可以直接计算的,231就是xx1 - 321,312就是3xx - 321。

  显然我们这样这样用树状数组统计一下 f[i] 表示 i 前面<a[i]的个数,然后就可以计算出:前面<a[i]的个数、前面>a[i]的个数、后面<a[i]的个数、后面>a[i]的个数

  然后这样暴力计算即可。

Code

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cstdlib>
 6 #include<cmath>
 7 using namespace std;
 8 typedef long long s64;
 9 const int ONE = 1000001;
10 const int MOD = 1e9+7;
11
12 int n;
13 int a[ONE],f[ONE];
14 s64 Ans;
15
16 int get()
17 {
18         int res=1,Q=1;    char c;
19         while( (c=getchar())<48 || c>57)
20         if(c=='-')Q=-1;
21         if(Q) res=c-48;
22         while((c=getchar())>=48 && c<=57)
23         res=res*10+c-48;
24         return res*Q;
25 }
26
27 s64 C(int n)
28 {
29         return (s64)n*(n-1)/2;
30 }
31
32
33 namespace Bit
34 {
35         int C[ONE];
36
37         int lowbit(int x)
38         {
39             return x&-x;
40         }
41
42         void Add(int R,int x)
43         {
44             for(int i=R;i<=n;i+=lowbit(i))
45                 C[i]+=x;
46         }
47
48         int Query(int R)
49         {
50             int res=0;
51             for(int i=R;i>=1;i-=lowbit(i))
52                 res+=C[i];
53             return res;
54         }
55 }
56
57 int pre_min(int i) {return f[i];}
58 int pre_max(int i) {return i-1-f[i];}
59 int suc_min(int i) {return a[i]-1-pre_min(i);}
60 int suc_max(int i) {return n-a[i]-pre_max(i);}
61
62 int main()
63 {
64         n=get();
65         for(int i=1;i<=n;i++)    a[i]=get();
66
67         for(int i=1;i<=n;i++)
68         {
69             Bit::Add(a[i],1);
70             f[i] = Bit::Query(a[i]-1);
71         }
72
73         for(int i=1;i<=n;i++)
74         {
75             Ans += (s64)pre_min(i) * suc_max(i);
76             Ans += C( pre_max(i) );
77             Ans += C( suc_min(i) );
78             Ans -= (s64)2 * pre_max(i) * suc_min(i);
79         }
80
81         printf("%lld",Ans);
82 }

View Code

转载于:https://www.cnblogs.com/BearChild/p/6522835.html

【Foreign】朗格拉日计数 [暴力]相关推荐

  1. 有限元-朗格朗日和欧拉描述的区别

    在学习有限元的过程中经常会出现拉格朗日描述.欧拉描述,拉格朗日描述又分为完全的拉格朗日格式.更新的拉格朗日格式,初学者很容易被这些描述和格式类型搞的晕头转向,因此有必要理清它们之间的关系. 引言 描述 ...

  2. 《 Matlab_Simulink动力学系统建模仿真》及 ‘///’动力学 达朗贝尔原理、虚位移原理、朗格朗日方程...

    <动力学-达朗贝尔原理.虚位移原理.朗格朗日方程> < Matlab_Simulink动力学系统建模仿真> [] 移动机器人形式方向控制PID实现 []单级倒立摆系统的状态反馈 ...

  3. 【BZOJ1815BZOJ1488】有色图图的同构,Polya计数+暴力

    P1815 P1488 思路: 之前看论文发现的一道题目 点的置换引起边的置换 1488是弱化版 直接套烧边引理显然是不科学的 写了一个Polya的暴力,复杂度是O(n!n2)O(n!n^2) 跑不出 ...

  4. Jam计数 暴力排列法

    详细题设请在站内搜索"Jam计数法"  原题中的样例输入和输出分别为 Input: 2 10 5 bdfij Output: bdghi bdghj bdgij bdhij bef ...

  5. matlab 狄利克雷函数图像,Poisson image editing算法实现的Matlab代码解析

    之前我发了数篇系列博文来仔细研究Poisson Image Editing算法,每次重新审视和深入,仿佛都能有更为深刻的认识和很大的收获.这应该算是我这个系列的完结篇,会用用Matlab代码一点一点的 ...

  6. 数据去重 填补空缺值(拉格朗日)

    此时我是不是该喊一声"我胡汉三又回来啦!!!" 这篇博客容许我摸一下数据清洗的裤脚...... 1.首先. 这是在网上找的数据,一个心脏病的数据集,英文不好的默默打开翻译,被我悄悄 ...

  7. Poisson image editing算法实现的Matlab代码解析

    之前我发了数篇系列博文来仔细研究Poisson Image Editing算法,每次重新审视和深入,仿佛都能有更为深刻的认识和很大的收获.这应该算是我这个系列的完结篇,会用用Matlab代码一点一点的 ...

  8. 一次真实的应急响应案例(Linux)——SSH暴力破解+crontab隐藏后门——事件复现(含靶场环境)

    一.SSH协议介绍 SSH(Secure Shell)是一套协议标准,可以用来实现两台机器之间的安全登录以及安全的数据传送,其保证数据安全的原理是非对称加密.SSH 是目前较可靠,专为远程登录会话和其 ...

  9. C#上位机(定时器计数)

    1.对窗体进行编辑,并对每一个控件进行属性修改 1.控件可以直接拖进窗体中: 2.对每一个控件进行修改:主要修改Test(窗体显示的部分)和Name(内部函数名,一般建议大驼峰格式命名.) 3.特别是 ...

最新文章

  1. boost::safe_numerics模块实现数据类型下溢的测试程序
  2. new,is和as运算符解析及运行时类型,对象,线程堆栈,托管堆之间的联系
  3. SAP UI5 bindProperty的实现
  4. 有机晶体数据库_Cambridge Structural Database 2017 晶体结构分析软件分享
  5. 8tupian图片加密平台源码 v3.5
  6. 后端工程师的「跨域」之旅
  7. 分布式文件系统HDFS体系
  8. docker 安装dm8 数据库
  9. Greenplum数据库故障分析——UDP Packet Lost(packet reassembles failed)
  10. 交互设计的本质是什么?交互设计哪些意义?
  11. SDHC 与SD的区别
  12. 58子站安居,经纪人营销管理平台登录接口加密逆向
  13. c#读蓝牙数据_c# – 将蓝牙设备连接到具有32feet .NET蓝牙库的计算机
  14. PHPUnit的使用
  15. vs code 简易使用教程(前端)
  16. 【技术分享】Ubuntu20.04启动LGSVL-2021.03闪退解决方案
  17. MYSQL基本操作(增删改查)
  18. Java之于Javascript就好比Car(汽车)之于Carpet(地毯)。
  19. 计算机课情感态度与价值观,浅谈信息技术课中情感态度价值观的培养
  20. Codeforces Round #703 (Div. 2)C1C2 Guessing the Greatest(二分)

热门文章

  1. java默认权限什么时候使用_Java 应用程序默认权限(简例)
  2. 三次握手,四次挥手(大白话)
  3. smartbi v7 Linux,图表传值?花式互动?Smartbi V7.0.1新特性有没有撩到你?
  4. preg_replace在java中_Java相当于PHP的preg_replace_callback
  5. 中兴手机数据通道打不开_换了个新手机
  6. An attempt by a client to checkout a Connectio n has timed out报错解决
  7. MYSQL中时间毫秒数转换及日期格式化
  8. easyui combotree 数据太多 无法显示的处理方法
  9. [DBNETLIB][ConnectionOpen(connect()).]SQL Server 不存在或拒绝访问解决方
  10. linux ps命令使用详解