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 ...
随机推荐
- Game of Taking Stones && POJ1259 /// 最大空凸包 几何+DP
题目大意: 给定n个点 求出这n个点中最大空凸包的面积 只放个模板 一份模板过两题(滑稽 这个讲解够详细了 https://blog.csdn.net/nyroro/article/details/4 ...
- USACO2007 捕牛记 /// queue+桶 oj1503
题目大意: John和牛都站在一条直线上,开始时John位于坐标点N上( 0 ≤ N ≤ 100,000 ),牛位于坐标点K上( 0 ≤ K ≤ 100,000 ). John有两种行动方式:步行和瞬 ...
- 【2018ACM/ICPC网络赛】徐州赛区
呃.自闭了自闭了.我才不会说我写D写到昏天黑地呢. I Characters with Hash 题目链接:https://nanti.jisuanke.com/t/31461 题意:给你一个字符串 ...
- android:两个应用之间怎样传值之activity
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zjh171/article/details/37738579 两个应用之间怎样传值.事实上这个标题太 ...
- JS事件 鼠标经过事件(onmouseover)鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序。
鼠标经过事件(onmouseover) 鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序. 现实鼠标经过"确定&quo ...
- Java 基础 - Object.clone()深拷贝和浅拷贝
作者:YSOcean 出处:http://www.cnblogs.com/ysocean/ 本文版权归作者所有,欢迎转载,但未经作者同意不能转载,否则保留追究法律责任的权利. ---------- ...
- 【JZOJ5433】图
description 有一个n个点A+B条边的无向连通图,有一变量x,每条边的权值都是一个关于x的简单多项式,其中有A条边的权值是k+x,另外B条边的权值是k-x,如果只保留权值形如k+x的边,那么 ...
- spark启动后出现“JAVA_HOME not set” 异常和"org.apache.hadoop.security.AccessControlException"异常
/home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/sbin/start-all.sh 启动后执行jps命令,主节点上有Master进程,其他子节点上有Wor ...
- HttpClient 使用案例
package com.qifeng.config.ygx.common.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fas ...
- react 高阶组件之小学版
高阶组件 多么高大上的概念,一般用来实现组件逻辑的抽象和复用,在很多三方库(redux)中都被使用到,但是开发普通有任务项目时,如果能合理使用高阶组件,也会显著的提高代码质量. 我们今天就用最简单的 ...