枚举删除一个区间
multiset 左边找最大值 右边找最小值
r-l值的最大
#include<bits/stdc++.h>
#include<string>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
const ll mod=1e9+7;
const int INF=0x3f3f3f3f;
#define IO ios::sync_with_stdio(false);cin.tie(0);
ll T;
ll n,m,minn,maxx,cnt,sum,ans,k,len;
ll a[maxn],b[maxn],dp[maxn];
string s,t;
multiset<ll> l,r;
int main() {
IO;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
l.insert(a[i]);
r.insert(b[i]);
}
for(int i=1;i<=n;i++){
l.erase(l.find(a[i]));
r.erase(r.find(b[i]));
ans=max(ans,*r.begin()-*--l.end());//答案是右区间的最小值和左区间的最大
l.insert(a[i]);
r.insert(b[i]);
}
cout<<ans<<endl;
return 0;
}
B
a[i]<=2*a[i-1]的最大区间长度
int main() {
IO;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
ll l=1,r=1;maxx=1;
for(int i=2;i<=n;i++){
if(a[i]<=2*a[i-1]){
r++;
maxx=max(maxx,r-l+1);
}
else{
l=i;
r=l;
}
}
cout<<maxx<<endl;
return 0;
}
A
不包括t本身
#include<bits/stdc++.h>
#include<string>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
const ll mod=1e9+7;
const int INF=0x3f3f3f3f;
#define IO ios::sync_with_stdio(false);cin.tie(0);
ll T;
ll n,m,minn,maxx,cnt,sum,ans,k,len;
ll a[maxn],b[maxn],dp[maxn];
string s,t;
multiset<ll> l,r;
int main() {
IO;
cin>>n>>k;
cin>>t;
for(int i=0;i<n-1;i++){
if(t.substr(0,i+1)==t.substr(n-i-1)){
cnt=i+1;
cout<<t;
}
}
if(cnt==0){
for(int i=1;i<=k;i++){
cout<<t;
}
cout<<endl;
return 0;
}
for(int i=1;i<=k-1;i++)
cout<<t.substr(cnt);
cout<<endl;
return 0;
}