我的代码 C1 都过了……但是 C2 挂了。
求调,不知道错在哪里。
#include<bits/stdc++.h>
#define gt getchar
#define pt putchar
#define int long long
//typedef long long ll;
//typedef __int128 lll;
typedef unsigned long long ull;
const int N=2e5+5;
using namespace std;
inline int read(){
int x=0,f=1;char ch=gt();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=gt();}return x*f;
}
inline void print(int x){
if(x<0)pt('-'),x=-x;
if(x>9)print(x/10);
pt(x%10+48);
}
inline void println(int x){
print(x);
pt('\n');
}
int n,a[N],head,tail,last,cnt;
char answer[N];
signed main(){
n=read(),head=1,tail=n;
for(int i=1;i<=n;++i)
a[i]=read();
while(1){
if((last>=a[head]&&last>=a[tail])||tail<head||cnt==n)break;
if(a[head]<a[tail]){
if(a[head]>last){
answer[++cnt]='L';
last=a[head];
head++;
}else{
answer[++cnt]='R';
last=a[tail];
tail--;
}
}else if(a[head]>a[tail]){
if(a[tail]>last){
answer[++cnt]='R';
last=a[tail];
tail--;
}else{
answer[++cnt]='L';
last=a[head];
head++;
}
}else{
int cnt1=0,cnt2=0,sum1=last,sum2=last;
for(int i=head+1;i<=tail;++i){
if(a[i]>sum1)sum1=a[i],cnt1++;
else break;
}
for(int i=tail-1;i>=head;--i){
if(a[i]>sum2)sum2=a[i],cnt2++;
else break;
}
if(cnt1>=cnt2){
answer[++cnt]='L';
last=a[head];
head++;
}else{
answer[++cnt]='R';
last=a[tail];
tail--;
}
}
}
println(cnt);
for(int i=1;i<=cnt;++i)
pt(answer[i]);
return 0;
}