[BZOJ 1145] 图腾totem
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1145
Solution:
算是一道神题了吧
设 f(abcd)为:当选出的四个数相对大小关系为abcd时,有多少种选择方式
则 res = f(1324) - f(1243) -f(1432)
用拆分法转化此问题 :
f(1324) = f(1x2x) - f(1423)
f(1243) = f(12xx) - f(1234)
f(1432) = f(14xx) - f(1432)
所以res = f(1x2x) + f(1234) - f(12xx) - f(14xx)
= f(1x2x) + f(1234) + f(13xx) - f(1xxx)
预处理求出l[i],r[i]表示在i的左/右,比a[i]小的个数
可以先用树状数组求l[i],则r[i]=(a[i]-l[i]-1)
接下来对每一种情况分类讨论即可:
#include <bits/stdc++.h> using namespace std;
typedef long long ll; const int MAXN=2e5+;
const int MOD=; int n,dat[MAXN],bit[MAXN],l[MAXN],r[MAXN]; void Update(int pos,int val)
{
while(pos<=n)
bit[pos]+=val,pos+=pos&(-pos);
} int Query(int pos)
{
int ret=;
while(pos)
ret+=bit[pos],pos-=pos&(-pos);
return ret;
} int cal1()//1x2x
{
memset(bit,,sizeof(bit));int ret=;
for(int i=;i<=n;i++)
ret=(ret+((1ll*(n-i-r[i])*(l[i]*(i-)-Query(dat[i])-l[i]*(l[i]-)/))&MOD))&MOD,
Update(dat[i],i-);
return ret;
} int cal2()//1234
{
memset(bit,,sizeof(bit));int ret=;
for(int i=;i<=n;i++)
ret=(ret+(1ll*(n-i-r[i])*Query(dat[i])&MOD))&MOD,
Update(dat[i],l[i]);
return ret;
} int cal3()//13xx
{
memset(bit,,sizeof(bit));int ret=;
for(int i=n;i>;i--)
ret=(ret+(1ll*(n-r[i]-i)*(Query(dat[i])-r[i]*(r[i]-)/)&MOD))&MOD,
Update(dat[i],dat[i]-);
return ret;
} int cal4()//1xxx
{
memset(bit,,sizeof(bit));int ret=;
for(int i=;i<=n;i++)
{
int t=n-i-r[i];
ret=(ret+(1ll*t*(t-)*(t-)/&MOD))&MOD;
}
return ret;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&dat[i]);
l[i]=Query(dat[i]);r[i]=dat[i]--l[i];
Update(dat[i],);
} printf("%d",(cal1()+cal2()+cal3()-cal4()+MOD+)&MOD);
return ;
}
Review:
1、16777216是2的24次方
可以用按位与来优化mod
2、思路的借鉴:
一般此类序列性问题,当每一位都确定时反而难以求解
于是我们将确定转化为不确定来统一计算答案
[BZOJ 1145] 图腾totem的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- ImageNet2017文件下载
ImageNet2017文件下载 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PASCAL ...
- ImageNet2017文件介绍及使用
ImageNet2017文件介绍及使用 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PAS ...
- HTML5之2D物理引擎 Box2D for javascript Games 系列 第三部分之创建图腾破坏者的关卡
创建图腾破坏者的关卡 现在你有能力创建你的第一个游戏原型,我们将从创建图腾破坏者的级别开始. 为了展示我们所做事情的真实性,我们将流行的Flash游戏图腾破坏者的一关作为 我们模仿的对象.请看下面的截 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- 【ZJ选讲·BZOJ 5073】
小A的咒语 给出两个字符串A,B (len<=105) 现在可以把A串拆为任意段,然后取出不超过 x 段,按在A串中的前后顺序拼接起来 问是否可以拼出B串. [题解] ①如果遇 ...
- [POI2008] Poc (原名 Trians) Treap+Hash
这个题和千山鸟飞绝体现出了一种用平衡树解决动态集合问题,主要套路就是蜜汁标记. 这个题我一开始用替罪羊树搞了一下对了28个点,后来我换成了Treap一搞对了14个点,再后来发现被卡了Hash我竟然在自 ...
- POJ2502:Subway(最短路)
Subway Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14634 Accepted: 4718 题目链接:http ...
- OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议
简介 OSI 是理论上的模型,也就是一个统一的国际标准,现在的很多网络设备或者是网络协议都不同程度的精简了自己的所谓的模型,那么他们为了自己的通讯兼容都会参考这个OSI模型 TCP/IP 包括: TC ...
- python 闭包与装饰器
1.闭包--返回子函数名 作用:使用子函数之外的父函数的变量 闭包就是你调用了一个函数a,这个函数a反悔了一个子函数名b,这个返回的函数b就叫做闭包 代码举例 def a(): test = 'aa' ...
- linux 学习好资源
Linux-Wiki.cn http://linux-wiki.cn/wiki/zh-hans/Linux%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84 Linux目录 ...
- php模式-数据映射模式
概念:简言之,数据映射模式就是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作. 深入理解:数据映射,是在持久化数据存储层(一般是关系型数据库)和驻于内存的数据表现层之间进行双向数据 ...
- Cannot read property 'resetFields' of undefined 问题及引申
问题描述: 使用element开发我的后台系统,编辑和新增使用了同一个弹出框<el-dialog><el-form></el-form></el-dialog ...
- SpringMvc基础知识(二) springmvc和mybatis整合
1 springmvc和mybatis整合 1.1 需求 使用springmvc和mybatis完成商品列表查询. 1.2 整合思路 springmvc+mybaits的系统架构: 第一步:整合dao ...
- Linux+Python高端运维班第六周作业
1.复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#: [root@localhost tm ...