记录编号 |
578362 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[BJOI 2011]双端队列 |
最终得分 |
100 |
用户昵称 |
ムラサメ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.119 s |
提交时间 |
2023-03-09 12:20:29 |
内存使用 |
3.71 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct node{
int v,p;
}a[200010];
bool cmp(node x,node y){
return x.v<y.v;
}
int n,ans=0,flag=-1,tmp=-0x7f7f7f7f;
void check(int begin,int end){
if(tmp==-0x7f7f7f7f){
tmp=begin;
return;
}
if(flag==-1){
if(begin<tmp&&tmp<end){
tmp=end;
flag=-flag;
ans++;
}
else{
if(begin>tmp){
tmp=end;
flag=-flag;
ans++;
}
else{
if(tmp>end){
tmp=begin;
}
}
}
}
else{
if(begin<tmp&&tmp<end){
tmp=begin;
flag=-flag;
}
else{
if(tmp>end){
tmp=begin;
flag=-flag;
}
else{
if(begin>tmp){
tmp=end;
}
}
}
}
}
int main(){
freopen("bjoi2011_deque.in","r",stdin);
freopen("bjoi2011_deque.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].v;
a[i].p=i;
}
sort(a+1,a+n+1,cmp);
int b,e,rec;
for(int i=1;i<=n;){
rec=i+1;
b=a[i].p;
e=a[i].p;
while(a[i].v==a[rec].v){
b=min(b,a[rec].p);
e=max(e,a[rec].p);
rec++;
}
check(b,e);
i=rec;
}
if(flag==-1){
ans++;
}
cout<<ans<<endl;
return 0;
}