[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:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- 一个JavaScript日期格式化扩展函数
我们都知道在Java和PHP语言中,有专门用于格式化日期对象的类和函数,例如Java中的DateFormat等等,通过这些类和函数,我们可以方便的将一个日期对象按照格式的要求输出为字符串,例如对于同一 ...
- css的padding,border,margin的意思
下面的内边距(padding).边框(border) .外边距(margin)的意思是我自己的理解. 代码如下: <!DOCTYPE html> <html lang="e ...
- CMU Bomblab 答案
室友拉我做的... http://csapp.cs.cmu.edu/3e/labs.html Border relations with Canada have never been better. ...
- NetTime
NetTime NetTime is a Simple Network Time Protocol (SNTP) client for Windows 95/98/Me/NT/2000/XP/Vist ...
- php设定错误和异常处理可使用的函数
1.register_shutdown_function 使用场景:当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,这个函数会被调用. 函数介绍: void register_shutdown ...
- Java并发(8)- 读写锁中的性能之王:StampedLock
在上一篇<你真的懂ReentrantReadWriteLock吗?>中我给大家留了一个引子,一个更高效同时可以避免写饥饿的读写锁---StampedLock.StampedLock实现了不 ...
- 应对ubuntu linux图形界面卡住的方法
有的时候,我的ubuntu图形界面会卡住,当然这个时候你可以重新启动,不过最好的办法应该是结束这个桌面进程 那桌面卡住了怎么来结束桌面进程呢? 这时候就需要打开tty了 按下键盘ctrl+alt+f1 ...
- 时间模块(time/date)
在Python中,常用的表示方式的时间有:时间戳,字符串时间,元组时间(既年,月,日,时,分,秒,周几,一年中的第几天,时区) time模块: time.timezone: 获取当前标准时 ...
- C/C++里的const(1)
首先来看这样一段程序: #include<iostream> using namespace std; int main(){ char *s = "hello world&qu ...
- Linux下查看使用的是哪种shell的方法汇总【转】
转自:http://www.jb51.net/LINUXjishu/247797.html 查看当前发行版可以使用的shell 复制代码 代码如下: [root@localhost ~]$ cat / ...