[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:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- POJ2396:Budget(带下界的网络流)
Budget Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8946 Accepted: 3327 Special ...
- PRINT_TABLE 列以行形式显示
在sqlplus,如果列比较多,往往会显示不够清晰,这时如果能把查询语句行转列就明了多了,在网上看到print_table存储过程:里面所设置的日期格式,可根据自己习惯修改 CREATE OR REP ...
- 移动端list布局,左边固定,右边自适应
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- JS表单验证优化
var validate = (function(){ var messages = { isEmail : '输入正确格式邮箱', isPhoneNum : '输入正确手机号' }; var val ...
- Dokuwiki 二次开发记录
Dokuwiki 二次开发记录 [转]http://www.syyong.com/other/Dokuwiki-Secondary-Development-Record.html DokuWiki 是 ...
- [BZOJ2946] [Poi2000]公共串解题报告|后缀数组
给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 单词个数<=5,每个单词长度<=2000 尽管最近在学的是SAM...但是看到这个题还是忍不住想写SA... (其实是不 ...
- Linux curl命令【curl】
命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具 ...
- python学习 - yield
def myYield2(): for i in range(3): yield '2222 i am in myYield2', 'i = ', i def myYield(): for i in ...
- objc_msgSend arm64 崩溃问题
http://blog.csdn.net/chenyong05314/article/details/42121001 2014-12-24 10:49 878人阅读 评论(0) 收藏 举报 转载自: ...
- appium===报错adb server version (31) doesn’t match this client (39); killing…的解决办法
当使用在cmd窗口调用adb shell命令的时候 提示如下: adb server version (31) doesn't match this client (39); killing...er ...