洛咕 P4528 [CTSC2008]图腾


神题orz。

先约定abcd表示\(1\leq A<B<C<D\leq n\),而且\(y_a,y_b,y_c,y_d\)的排名正好是\(a,b,c,d\)的方案数

那么所求就是

1324-1243-1432

=(1x2x-1423)-(14xx-1423)-(12xx-1234)

(其中有x的表示排名任意,但是不能重复)

=1x2x-14xx-12xx+1234

=1x2x-1xxx+13xx+1234

预处理\(L,R\),\(L_i=\sum_{j<i}[y_j<y_i],R_i=\sum_{j>i}[y_j<y_i]\),可以用树状数组处理

(可以看出,\(L_i+R_i=y_i-1\),可以只求\(L_i\)就行了;\(n-i-R_i=\sum_{j>i}[y_j>y_i]\),这是等一下要用到的性质)

分别看怎么求:

1x2x:枚举2的位置\(i\),那么右边有\(n-i-R_i\)中选法,左边要满足\(j<k<i,y_j<y_i,y_k>y_i\),1放在j,x放在k的位置

若只考虑\(y_j<y_i\),有\(L_i*(i-1)\)种选法;那么多算了\(j<k,y_k<y_i\)的和\(j\geq k\)的

\(j<k,y_k<y_i\)的方案数是\(C_{L_i}^2\)

\(j>k\)的方案数,因为此时对\(k\)的限制只有\(k\leq j\),所以对每个\(j\)都可以取\([1,j]\),所以就是\(\sum_{p<i,y_p<y_i}p\)

1xxx:很容易,就是\(\sum C_{n-i-R_i}^3\)

13xx:枚举3,那么4有\(n-i-R_i\)种选法,1和2要满足\(j<i<k,y_j<y_k<y_i\)

只考虑\(y_j<y_i,y_k<y_i,j<i\),有\(L_i(y_i-1)\)种选法,需要减去的是\(k\leq i\)的和\(y_j\geq y_k\)的

\(k\leq i\)的就是\(C_{L_i}^2\)

\(y_j>y_k\)的,此时对\(k\)的限制只有\(y_k\leq y_j\),所以对每个\(j\)都可以取所有\(y<y_j\)的位置,就是\(\sum_{p<i,y_p<y_i}y_p\)

1234:枚举3,后面的就是\(n-i-R_i\),前面如果2确定了放在\(j\)位置,1的放法就是\(L_j\),答案是\(\sum_{i} (n-i-R_i)(\sum_{j<i,y_j<y_i}L_j)\),树状数组直接做

完结撒FA(逃

#include<bits/stdc++.h>
#define il inline
#define vd void
#define mod 16777216
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
ll n,p[200010],L[200010],R[200010];
int t[200010];
il vd inc(int&x,int y){x+=y;x%=mod;}
il vd upd(int p,int d){while(p<=n)inc(t[p],d),p+=p&-p;}
il int query(int p){int ret=0;while(p)inc(ret,t[p]),p-=p&-p;return ret;}
int main(){
n=gi();
for(int i=1;i<=n;++i)p[i]=gi();
for(int i=1;i<=n;++i)L[i]=query(p[i]),R[i]=p[i]-1-L[i],upd(p[i],1);
memset(t,0,sizeof t);
int ans=0;
for(int i=1;i<=n;++i){
int x=n-i-R[i];
ans=(ans-(1ll*x*(x-1)*(x-2)/6)%mod+mod)%mod;//1xxx
}
for(int i=1;i<=n;++i)ans=(ans+(n-i-R[i])*query(p[i]))%mod,upd(p[i],L[i]);//1234
memset(t,0,sizeof t);
for(int i=1;i<=n;++i)ans=(ans+(L[i]*(i-1)-query(p[i])-L[i]*(L[i]-1)/2)*(n-i-R[i])%mod+mod)%mod,upd(p[i],i);//1x2x
memset(t,0,sizeof t);
for(int i=n;i;--i)ans=(ans+(query(p[i])-R[i]*(R[i]+1)/2)*(n-i-R[i])%mod+mod)%mod,upd(p[i],p[i]);//13xx
printf("%d\n",ans);
return 0;
}

洛咕 P4528 [CTSC2008]图腾的更多相关文章

  1. 洛咕3312 [SDOI2014]数表

    洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...

  2. 洛咕 P3700 [CQOI2017]小Q的表格

    洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...

  3. 洛咕 P2336 [SCOI2012]喵星球上的点名

    洛咕 P2336 [SCOI2012]喵星球上的点名 先求出SA和height,一个点名串对应的就是一段区间,还有很多个点,就转化成了 有很多个区间,很多个点集,对每个区间计算和多少个点集有交,对每个 ...

  4. 洛咕 P4131 [WC2005]友好的生物

    洛咕 P4131 [WC2005]友好的生物 首先可以发现\(C\)是没有用的,可以乘进所有的权值里面做 考虑没有最后一维的限制,那么两个生物的友好值就是 \(\sum_{i=1}^k|a_i-b_i ...

  5. 洛咕P3250 [HNOI2016]网络 整体二分

    这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...

  6. 洛咕 P2480 [SDOI2010]古代猪文

    洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...

  7. 洛咕 P2155 [SDOI2008]沙拉公主的困惑

    洛咕 P2155 [SDOI2008]沙拉公主的困惑 有个结论,就是如果\(gcd(a,b)=1\),那么\(gcd(a+kb,b)=1\).证明比较显然. 所以这个题目要问的\(n!\)就可以分成\ ...

  8. 洛咕 P3306 [SDOI2013]随机数生成器

    洛咕 P3306 [SDOI2013]随机数生成器 大力推式子??? \(X_{i}=\underbrace{a(a(\cdots(a(a}_{i-1个a}X_1+b)))\cdots)\) \(=b ...

  9. bzoj1145[CTSC2008]图腾

    传送门 虽然是远古时期的ctsc,但是果然还是ctsc啊 前置芝士:树状数组 这个题最开始的思路很好想,由于之前写过一个类似处理的题,所以这个题我一开始就想到了思路. 首先,我们可以尝试讲图腾表示为x ...

随机推荐

  1. [翻译] STAlertView

    STAlertView The idea of this component is to improve the readability while using the native UIAlertV ...

  2. 剑指offer 11二进制中1的个数

    输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. java版本: public class Solution { public int NumberOf1(int n) { Strin ...

  3. Beanstalkd 的理解

    Beanstalkd 的理解 Beanstalkd 是一个轻量级的内存型队列,利用了和Memcache 类似的协议.其官网beanstakkd官网 下方的感谢语说: Many thanks to me ...

  4. Python的unittest框架的断言总结

    常用的断言方法如下: assertFalse:为假时返回True:self.assertFalse(表达式,“表达式为true时打印的message”) assertTrue:为真时返回True:se ...

  5. 多线程操作C++ STL vector出现概率coredump问题及尽量避免锁的双缓冲队列

    多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump. 前段时间, 遇到一个多线程操作了全局的vector的问题,  程序崩了.场景是这样的:某全局配置参数保存在一 ...

  6. 1088. [SCOI2005]扫雷Mine【网格DP】

    Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了 ,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子 ...

  7. Hive学习之路 (十九)Hive的数据倾斜

    1.什么是数据倾斜? 由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点 2.Hadoop 框架的特性 A.不怕数据大,怕数据倾斜 B.Jobs 数比较多的作业运行效率相对比较低,如子查询比较 ...

  8. LayIM.AspNetCore Middleware 开发日记(一)闲言碎语

    前言 前几天写博客的时候突然看见了历史上的今天.不禁感慨时光如梭,这系列博客后来被我标注了已经过时,但是还有很多小伙伴咨询我.既然过时就要更新,正好 .NET Core 也出来很久了,于是乎想到把La ...

  9. bn两个参数的计算以及layer norm、instance norm、group norm

    bn一般就在conv之后并且后面再接relu 1.如果输入feature map channel是6,bn的gamma beta个数是多少个? 6个. 2.bn的缺点: BN会受到batchsize大 ...

  10. 程序集(Assembly)和模块(Managed Module)

    前言 一直都用集成开发坏境(IDE),一直对模块和程序集的概念理解的不是很直观,因为一Build就把你的单个模块塞进程序集里面去了.当然,对你的编程也不会造成太大的影响.但有些东西你最好还是知道比较好 ...