noip模拟41(待补)
时间:2021-08-19
本文章向大家介绍noip模拟41(待补),主要包括noip模拟41(待补)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
A. 你相信引力吗
\(Sort+Map+\)链表 乱搞搞了\(80pts\).
考时代码
#include<bits/stdc++.h>
using namespace std;
namespace BSS {
#define ll long long int
#define ull unsigend ll
#define re register ll
#define lf double
#define lbt(x) (x&(-x))
#define mp(x,y) make_pair(x,y)
#define lb lower_bound
#define ub upper_bound
#define File(x,y) freopen(#x,"r",stdin),freopen(#y,"w",stdout)
#define Fill(x,y) memset(x,y,sizeof x)
#define Copy(x,y) memcpy(x,y,sizeof x)
inline ll read() {
ll ss=0; bool cit=1; char ch;
while(!isdigit(ch=getchar())) if(ch=='-') cit=0;
while(isdigit(ch)) ss=(ss<<3)+(ss<<1)+(ch^48),ch=getchar();
return cit?ss:-ss;
}
} using namespace BSS;
const ll N=5e6+51;
ll m,n,cnt,tail,ts,maxn,ans;
ll h[N],lsh[N],stk[N],nxt[N],t[N],head[N];
struct I { ll l,r; } p[N];
inline ll inc(ll i,ll j){ return i+j>n ? i+j-n : i+j ; }
signed main(){
n=read(); ll l,r,temp;
for(re i=1;i<=n;i++) lsh[i]=h[i]=read();
sort(lsh+1,lsh+1+n); cnt=unique(lsh+1,lsh+1+n)-lsh-1;
for(re i=1;i<=n;i++) h[i]=lb(lsh+1,lsh+1+cnt,h[i])-lsh,maxn=max(h[i],maxn);
for(re i=1;i<=n;i++) if(h[i]==maxn) { temp=i; break; }
for(re i=1;i<=n;i++) t[i]=h[inc(temp-1,i)];
for(re i=1;i<=n;i++) h[i]=t[i];
for(re i=1;i<=n;i++)
if(!tail){
p[i].l=i,stk[++tail]=i;
}
else{
if(h[stk[tail]]>h[i]) p[i].l=i,stk[++tail]=i;
else if(h[stk[tail]]==h[i]) p[i].l=p[stk[tail]].l,stk[++tail]=i;
else{
r=i-1,l=N;
while(tail and h[stk[tail]]<h[i]){
temp=stk[tail--],p[temp].r=i-1,
l=p[temp].l;
}
if(h[stk[tail]]==h[i]) p[i].l=min(l,p[stk[tail]].l);
else p[i].l=l;
stk[++tail]=i;
}
}
while(tail) temp=stk[tail--],p[temp].r=n;
// for(re i=1;i<=n;i++) cout<<lsh[h[i]]<<' ';
// cout<<'\n';
// for(re i=1;i<=n;i++) cout<<p[i].l<<" "<<p[i].r<<'\n';
for(re i=n;i>=1;i--) nxt[i]=head[h[i]],head[h[i]]=i;
ll res=0;
for(re i=1;i<=n;i++) if(h[i]==h[1]) res++;
ans+=res*(res-1)/2;
temp=head[cnt-1];
while(temp){
res=1;
while(nxt[temp]&&p[nxt[temp]].l==p[temp].l&&p[nxt[temp]].r==p[temp].r){
res++,temp=nxt[temp];
}
ans+=res*(res-1)/2+res+res*(ans>0),temp=nxt[temp];
}
// cout<<"ans:"<<ans<<endl;
for(re i=cnt-2;i>=1;i--){
temp=head[i];
while(temp){
// cout<<lsh[i]<<' ';
res=1;
while(nxt[temp]&&p[nxt[temp]].l==p[temp].l&&p[nxt[temp]].r==p[temp].r){
res++,temp=nxt[temp];
}
// cout<<"res:"<<res<<endl;
ans+=res*(res-1)/2+res*2,temp=nxt[temp];
}
}
printf("%lld\n",ans);
return 0;
}
B. marshland
C. party?
D. 半夜
原文地址:https://www.cnblogs.com/AaMuXiiiiii/p/15163535.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- RocketMQ 零基础 集群及控制台部署
- Python连接Mariadb数据库
- Linux查看文件,去掉注释行和空白行
- SSH框架分层功能区分
- JAVA字符串如何像数组一样取字符?
- R语言泰坦尼克号随机森林模型案例数据分析
- 日常工作中的设计:解耦和封装
- 详解Gson的TypeToken原理
- 时间序列分解和异常检测方法应用案例
- 为什么机器学习应用交易那么难(上)
- 快速学习-sentinel动态规则扩展
- Git-git diff命令结果解析
- 快速学习-sentinel实时监控
- Git技术干货!工作中Git的使用实践和常用命令合集!
- gremlin-both()与bothE().bothV()的区别