分析

对于每一个点只要维护它前面/后面的一小一大组合的数量

对于这个可以维护两个树状数组

然后从前往后/从后往前分别扫一遍相乘即可

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define int long long
const int mod = ;
#define add(x,y) x=(x+y)%mod
#define del(x,y) (x-y+mod)%mod
inline int lb(int x){return x&(-x);}
int a[],b[],sum1[],sum2[],h[],n,m;
inline void add_a(int x,int k){while(x<=m)add(a[x],k),x+=lb(x);return;}
inline void add_b(int x,int k){while(x<=m)add(b[x],k),x+=lb(x);return;}
inline int q_a(int x){int res=;while(x)add(res,a[x]),x-=lb(x);return res;}
inline int q_b(int x){int res=;while(x)add(res,b[x]),x-=lb(x);return res;}
signed main(){
int i,j,k;
scanf("%lld",&n);
for(i=;i<=n;i++){
scanf("%lld",&h[i]);
m=max(m,h[i]);
}
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(i=;i<=n;i++){
add_a(h[i],);
add_b(h[i],del(q_a(m),q_a(h[i])));
sum1[i]=q_b(h[i]-);
}
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(i=n;i>;i--){
add_a(h[i],);
add_b(h[i],del(q_a(m),q_a(h[i])));
sum2[i]=q_b(h[i]-);
}
int ans=;
for(i=;i<=n;i++)
ans=(ans+1ll*sum1[i]*sum2[i]%mod)%mod;
cout<<ans<<"\n";
return ;
}

牛客提高D3t2 点与面的更多相关文章

  1. 牛客提高集训营6 C 树(树链剖分)

    题目链接 为了纪(zhuang)念(bi)写完这个树剖单独写一篇.感觉还好,也就6k嘛. 完整比赛题解:https://www.cnblogs.com/SovietPower/p/9826829.ht ...

  2. 牛客提高R5 A.同余方程

    题意 题目链接 Sol 设\(solve(x, y)\)表示\(i \in [0, x], j \in [0, y]\)满足题目要求的方案数 首先容斥一下,\(ans = solve(r_1, r_2 ...

  3. 牛客提高D6t3 分班问题

    分析 就就就是推柿子 看官方题解吧/px 代码 #include<iostream> #include<cstdio> #include<cstring> #inc ...

  4. 牛客提高D6t2 破碎的序列

    分析 我们不难发现对于偶数的情况只要相邻两个数不相等即可 而对于奇数的情况只要中间恰好隔一个数的两个数不相等即可 于是我们又dp[i][0/1]表示考虑到第i位,这一位和它后面离它最近的一个确定的数是 ...

  5. 牛客提高D6t1 积木大赛

    分析 每次修改用二位差分记录一下 之后对于三维分别统计即可 代码 #include<iostream> #include<cstdio> #include<cstring ...

  6. 牛客提高D5t1 deco的abs

    分析 傻子题? 对d取模后随便贪心即可 代码 #include<iostream> #include<cstdio> #include<cstring> #incl ...

  7. 牛客提高D4t3 清新题

    分析 树上从下往上线性基合并即可 并不需要启发式/xyx 代码 #include<iostream> #include<cstdio> #include<cstring& ...

  8. 牛客提高D4t2 卖羊驼

    分析 不难想到dp[i][j]表示前i个数分了j组的最大值 我们发现这个dp状态有决策单调性 g[i][j]表示对于第i个数它的第j位最近出现的位置 每次一定从这些点转移 预处理即可 似乎还可以做到1 ...

  9. 牛客提高D4t1 麻将

    分析 我们对于每一个点记录他所在的这一行以它为右端点向前最多有几个连续的1 之后我们考虑每一列 对每一列的点按照之前求出的值从小到大排序 一次考虑每一个宽度 而高度也可以很容易的求出 每次取最大值即可 ...

随机推荐

  1. Win10.更新

    1.资料: win10怎么关闭自动更新?win10关闭自动更新步骤-太平洋IT百科.html(https://product.pconline.com.cn/itbk/software/win10/1 ...

  2. nginx-->基本使用

    Nginx基本使用   一.下载 http://nginx.org/en/download.html 二.解压文件 在当前文件夹下通过终端就可以操作nginx nginx -v 三.配置详解 #use ...

  3. 转载Django 500,404,400错误修改优化

    转载:https://blog.csdn.net/qq_38038143/article/details/80105653 404错误:page not found视图 500错误:server er ...

  4. oracle--权限的传递

    sys 用户 普通授权lisi grant alter any table to lisi; 将权限指定admin ,可以权限传递给其他用户 grant alter any table to lisi ...

  5. new String创建了几个对象

    String str = new String(“abc”)  到底创建了几个对象? 首先String str是定义了一个字符串变量,并未产生对象,=不产生对象,那么只有后面的new String(& ...

  6. 使用Webpack的代码分离实现Vue懒加载(译文)

    当一个Vue的项目体积变得十分庞大的时候,使用Webpack的代码分离功能将Vue Components,routes或Vuex的代码进行分离并按需加载,会极大的提高App的首屏加载速度. 在Vue的 ...

  7. java实战应用:MyBatis实现单表的增删改

    MyBatis 是支持普通 SQL查询.存储过程和高级映射的优秀持久层框架.MyBatis 消除了差点儿全部的JDBC代码和參数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于 ...

  8. ssh传文件

    #coding=utf-8 import paramiko transport = paramiko.Transport(('192.168.70.129',22)) transport.connec ...

  9. MySQL的一些指令操作

    这个连接的也不错: https://www.cnblogs.com/wangyueping/p/11258028.html 如何给MySQL数据可添加一个用户 首先以root身份登录到MySQL服务器 ...

  10. php使用Socket实现聊天室功能(书中的代码)

    这只是一种技术 <?php $host = "127.0.0.1"; // 指定监听的端口,注意该端口不能与现有应用的端口冲突 $port = '9505'; $null = ...