如果这是世界末日的前一晚,

这是我的回答。

#include <bits/stdc++.h>

using namespace std;

int main(){
cout<<"Hello, the end."<<endl;
}

ZJ:

最后一场了,不写写总结就没了。

T1,先打一个暴力,然后发现可以简单容斥,就$\Theta(N \log N)$

T2不会,一个搜索,还感觉过不了最小点。

T3不会,打了一个$1$分算法(滑稽)

但是想了半天T3……

T2的剪枝有点难打……

TJ:

T1

就会T1,于是写个。

首先我们发现可以把四元组拆成两个二元组。

那么有$<a,b>,S_a < S_b$和$<c,d>,S_c > S_d$

于是直接用树状数组维护,算出$i$前严格比$S_i$大和小的数的数量就行。

但是有个问题,$a,b,c,d$各不相同,那么就需要算出有那些非法。

于是有

  1. $(a<i\ and\ S_a<S_i ,i,i, b>i\ and\ S_b<S_i)$
  2. $(a<i\ and\ S_a<S_i ,i,i, b<i\ and\ S_b>S_i)$
  3. $(a>i\ and\ S_a<S_i ,i,i, b>i\ and\ S_b>S_i)$
  4. $(a<i\ and\ S_a>S_i ,i,i, b>i\ and\ S_b>S_i)$

四种情况,同样用树状数组算出并容斥就行了!

//a

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define N 111111
#define LL long long using namespace std; int nn,vn;
int arr[N],val[N];
int pre[N];
LL befs[N],befb[N],afts[N],aftb[N];
LL ans; inline int fvind(int va){
return lower_bound(val+1,val+vn+1,va)-val;
}
inline int lowbit(int x){
return x&(-x);
}
void add(int pos,int v){
while(pos<=vn+10){
pre[pos]+=v;
pos+=lowbit(pos);
}
}
int query(int pos){
int res=0;
while(pos){
res+=pre[pos];
pos-=lowbit(pos);
}
return res;
}
int main(){
#ifndef LOCAL
freopen("a.in" ,"r",stdin);
freopen("a.out","w",stdout);
#endif
scanf("%d",&nn);
for(int i=1;i<=nn;i++){
scanf("%d",arr+i);
val[i]=arr[i];
}
sort(val+1,val+nn+1);
vn=unique(val+1,val+nn+1)-val-1;
for(int i=1;i<=nn;i++)
arr[i]=fvind(arr[i]); /* for(int i=1;i<=nn;i++)
cout<<arr[i]<<" ";
cout<<endl;*/ for(int i=1;i<=nn;i++){
befs[i]=query(arr[i]-1);
befb[i]=i-1-query(arr[i]);
add(arr[i],1);
}
memset(pre,0,sizeof pre);
for(int i=nn;i>=1;i--){
afts[i]=query(arr[i]-1);
aftb[i]=nn-i-query(arr[i]);
add(arr[i],1);
}
/* cout<<"Befs:";
for(int i=1;i<=nn;i++)
cout<<befs[i]<<" ";
cout<<endl<<"Befb:";
for(int i=1;i<=nn;i++)
cout<<befb[i]<<" ";
cout<<endl<<"Afts:";
for(int i=1;i<=nn;i++)
cout<<afts[i]<<" ";
cout<<endl<<"Aftb:";
for(int i=1;i<=nn;i++)
cout<<aftb[i]<<" ";
cout<<endl;
*/
LL suma=0,sumb=0;
for(int i=1;i<=nn;i++){
suma+=1ll*befs[i];
sumb+=1ll*afts[i];
}
ans=suma*sumb;
for(int i=1;i<=nn;i++){
ans-=1ll*befb[i]*aftb[i];
ans-=1ll*befs[i]*afts[i];
ans-=1ll*befs[i]*befb[i];
ans-=1ll*afts[i]*aftb[i];
}
cout<<ans<<endl;
}

T2T3咕了,可能不会补了。

"Hello CSP-S,Hello AFO"

19-11-14-Finally的更多相关文章

  1. JavaSE_ API常用对象 总目录(11~14)

    JavaSE学习总结第11天_开发工具 & API常用对象111.01 常见开发工具介绍11.02 Eclipse和MyEclipse的概述11.03 Eclipse的下载安装及卸载11.04 ...

  2. 2021.11.14 CF1583E Moment of Bloom(LCA+图上构造)

    2021.11.14 CF1583E Moment of Bloom(LCA+图上构造) https://www.luogu.com.cn/problem/CF1583E 题意: She does h ...

  3. Intel Artificial Intelligence Conference(2018.11.14)

    时间:2018.11.14地点:北京国贸大酒店

  4. 第26次Scrum会议(11/14)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/14 11:35~11:57,总计22min.地点:东北 ...

  5. Notes of Daily Scrum Meeting(11.14)

    Notes of Daily Scrum Meeting(11.14) 今天是项目第三周的周五,按原计划这时我们的项目应该已经要进入尾声进行组装调试了,但由于之前放假还有队员们的 效率比较低的原因,我 ...

  6. C++11/14笔记

    目录 语言层面 模板表达式中的空格 nullptr和std::nullptr_t 自动推导类型----auto 一致性初始化----Uniform Initialization 初始化列表(initi ...

  7. 基数排序的可复用实现(C++11/14/17/20)

    基数排序,是对整数类型的一种排序方法,有MSD (most significant digit)和LSD (least significant digit)两种.MSD将每个数按照高位分为若干个桶(按 ...

  8. Update 19.11 for Azure Sphere

    今天,微软发布了面向Azure Sphere的19.11更新,其主要亮点就是加入了对开发工具Visual Studio Code和Linux开发环境的支持.具体来讲,本次更新包含3个部分: 1. Az ...

  9. JZOJ 11.14 提高B组反思

    JZOJ 11.14 提高B组反思 T1 题目虽然有点高大上,但是很容易懂 有一个\(d\)维空间,同时有一个长度为\(2n\)的操作序列,每个操作往某一维的正方向或反方向走一格,问多少种方案使得最后 ...

  10. 毕向东_Java基础视频教程第19天_IO流(11~14)

    第19天-11-IO流(字节流File读写操作) import java.io.FileInputStream; import java.io.FileOutputStream; import jav ...

随机推荐

  1. VSCode 常用setiings.json设置

    { , , "editor.multiCursorModifier": "ctrlCmd", "editor.snippetSuggestions&q ...

  2. redis集群的学习(一)

    redis配置文件详解 redis默认是不作为守护进程来运行的,你可以把这个设置为yes,让它作为守护进程来运行 注意,当作为守护进程的时候,redis 会把进程ID 写到/var/run/redis ...

  3. python库之lightgbm

    一.安装 https://blog.csdn.net/qq_40317897/article/details/81021958 参考文献: [1].LightGBM中文文档 https://light ...

  4. PHP之最长回文串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: " ...

  5. 传统的dom的渲染方式

    DOM渲染的过程大致分为三个阶段: 后端渲染 前端渲染 独立DOM渲染(前后端相结合渲染) 1.后端渲染:DOM树的生成完全是在后端服务器中完成的,后端服务器的程序会把需要的数据拼合成一个类似于前端D ...

  6. Gamma(1)

    目前为止看到的解释Gamma来由说得最清楚的一篇文章:https://www.cambridgeincolour.com/tutorials/gamma-correction.htm 几点总结. 1, ...

  7. C++ 贪吃蛇一维

    #include <iostream> #include <conio.h> #include <windows.h> #include <time.h> ...

  8. php算法题---连续子数组的最大和

    php算法题---连续子数组的最大和 一.总结 一句话总结: 重要:一定要本机调试过了再提交代码,因为很容易出现考虑不周的情况,或者修改了之后没有考虑修改的这部分 利用空间来换时间,或者利用空间来换算 ...

  9. CreateRemoteThread简单应用

    要实现线程的远程注入必须使用Windows提供的CreateRemoteThread函数来创建一个远程线程 该函数的原型如下: HANDLE CreateRemoteThread(      HAND ...

  10. HDU-6375-度度熊学队列-双端队列deque/list

    度度熊正在学习双端队列,他对其翻转和合并产生了很大的兴趣. 初始时有 NN 个空的双端队列(编号为 11 到 NN ),你要支持度度熊的 QQ 次操作. ①11 uu ww valval 在编号为 u ...