19-11-14-Finally
如果这是世界末日的前一晚,
这是我的回答。
#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$各不相同,那么就需要算出有那些非法。
于是有
- $(a<i\ and\ S_a<S_i ,i,i, b>i\ and\ S_b<S_i)$
- $(a<i\ and\ S_a<S_i ,i,i, b<i\ and\ S_b>S_i)$
- $(a>i\ and\ S_a<S_i ,i,i, b>i\ and\ S_b>S_i)$
- $(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的更多相关文章
- JavaSE_ API常用对象 总目录(11~14)
JavaSE学习总结第11天_开发工具 & API常用对象111.01 常见开发工具介绍11.02 Eclipse和MyEclipse的概述11.03 Eclipse的下载安装及卸载11.04 ...
- 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 ...
- Intel Artificial Intelligence Conference(2018.11.14)
时间:2018.11.14地点:北京国贸大酒店
- 第26次Scrum会议(11/14)【欢迎来怼】
一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/14 11:35~11:57,总计22min.地点:东北 ...
- Notes of Daily Scrum Meeting(11.14)
Notes of Daily Scrum Meeting(11.14) 今天是项目第三周的周五,按原计划这时我们的项目应该已经要进入尾声进行组装调试了,但由于之前放假还有队员们的 效率比较低的原因,我 ...
- C++11/14笔记
目录 语言层面 模板表达式中的空格 nullptr和std::nullptr_t 自动推导类型----auto 一致性初始化----Uniform Initialization 初始化列表(initi ...
- 基数排序的可复用实现(C++11/14/17/20)
基数排序,是对整数类型的一种排序方法,有MSD (most significant digit)和LSD (least significant digit)两种.MSD将每个数按照高位分为若干个桶(按 ...
- Update 19.11 for Azure Sphere
今天,微软发布了面向Azure Sphere的19.11更新,其主要亮点就是加入了对开发工具Visual Studio Code和Linux开发环境的支持.具体来讲,本次更新包含3个部分: 1. Az ...
- JZOJ 11.14 提高B组反思
JZOJ 11.14 提高B组反思 T1 题目虽然有点高大上,但是很容易懂 有一个\(d\)维空间,同时有一个长度为\(2n\)的操作序列,每个操作往某一维的正方向或反方向走一格,问多少种方案使得最后 ...
- 毕向东_Java基础视频教程第19天_IO流(11~14)
第19天-11-IO流(字节流File读写操作) import java.io.FileInputStream; import java.io.FileOutputStream; import jav ...
随机推荐
- JQuery validate验证规则
//定义中文消息 var cnmsg = { required: “必选字段”, remote: “请修正该字段”, email: “请输入正确格式的电子邮件”, url: “请输入合法的网址”, d ...
- idea右键无run选项
选中java 文件所在的package右键选中Mark Directory as---Sources Root
- jdk源码阅读
转载https://www.cnblogs.com/mh-study/p/10078548.html 1.java.lang 1) Object 12) String 13) AbstractStri ...
- HDU 3308 线段树求区间最长连续上升子序列长度
题意:两种操作,Q L R查询L - R 的最长连续上升子序列长度,U pos val 单点修改值 #include <bits/stdc++.h> #define N 100005 us ...
- vba增删改查数据库
你在EXCEL中增加一个列名为ID,后在VBA中写以下代码,并引用Microsoft ActiveX Data Objects 2.8后执行Public Sub 写入SQL2008()Dim cnn ...
- CF528E Triangles3000
题意:给你一个不存在三线共交点的一次函数组a[i]x+b[i]y+c[i]=0. 问等概率选取三条直线,围成三角形的面积的期望. n<=3000. 标程: #include<bits/st ...
- Java 虚拟机 - 2.3 HotSpot虚拟机对象
对象的创建 Step1 类加载检查 当发现一条new指令时,检查: 该指令的参数是否能在常量池中定位到一个类的符号引用: 并且检查这个符号引用代表的类是否已经被加载.解析和初始化过.如果没有,那必须先 ...
- SpringCloudBus
不重启微服务的情况下更新配置 配置服务端 tensquare_config配置依赖 <dependency> <groupId>org.springframework.clou ...
- iOS之NSArray类簇简介-(copy、mutableCopy导致程序crash)
1.前言 开发时常常用数组对数据进行处理,对NSMutableArray进行操作时经常导致程序崩溃,特研究一下NSArray的类簇!涉及__NSPlaceholderArray.__NSArray0. ...
- JS break语句和continue语句
break语句 描述:break语句,用于无条件结束各种循环(退出循环)和switch. 说明:一般情况下,需要在break语句之前加一个条件判断.换句话说:就是条件成立了,就退出循环 continu ...