小A爱读书
#include <bits/stdc++.h>
using namespace std;
int a[100010],sum=0,ans=0;
int main(){
int n,t;
cin>>n>>t;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int i=1,j=1;
while(j<=n){
if(sum+a[j]>t){
sum-=a[i];
i++;
}
else{
sum+=a[j];
j++;
ans=max(ans,j-i);
}
}
cout<<ans;
return 0;
}
数学作业时刻
#include <bits/stdc++.h>
using namespace std;
int sum=0;
int main(){
int m;
cin>>m;
int i=1,j=1;
while(j<m){
if(sum+j>m){
sum-=i;
i++;
}
else{
sum+=j;
j++;
if(sum==m){
cout<<i<<" "<<j-1<<endl;
}
}
}
return 0;
}
晚会!
#include <bits/stdc++.h>
using namespace std;
int p[1000010],vis[2005],cnt=0;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>p[i];
}
int i=1,j=1,l=1,r=n;
while(i<=n || j<=n){
if(cnt!=m && jn+1){
break;
}
if(cntm){
if(r-l>j-i){
l=i;
r=j;
}
vis[p[i]]--;
if(vis[p[i]]==0) cnt--;
i++;
}
else{
vis[p[j]];
if(vis[p[j]]==1) cnt;
j++;
}
}
cout<<l<<" "<<r-1;
return 0;
}
闪耀的宝石
#include <bits/stdc++.h>
using namespace std;
const int N=5e4+5;
int n,k,a[N],L[N],R[N];
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}//获取数据
sort(a+1,a+n+1);//sort从小到大排序
int i=1,j=1;
while(j<=n){//第一遍双指针(从1到n)
if(a[j]-a[i]<=k){//判断差值不超过k
L[j]=max(L[i-1],j-i+1);//更新最大区间长度
j++;//扩大区间
}else{
i++;//否则缩小区间
}
}
i=n,j=n;
while(j>=1){//第二遍双指针(从n到1)
if(a[i]-a[j]<=k){
R[j]=max(R[j+1],i-j+1);
j--;
}else{
i--;
}
}
int ans=0;
for(int i=1;i<=n;i++){//找到左侧(包括i)和右侧(不包括i)和最长区间和
ans=max(ans,L[i]+R[i+1]);
}
cout<<ans;
return 0;
}
拍照纪念
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m;
struct node{
int x,id;
}a[N];
int vis[N];
bool cmp(node l,node r){
return l.x<r.x;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].id;
if(vis[a[i].id]0){
vis[a[i].id]=1;
m++;
}
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=N;i++){
vis[i]=0;
}
int i=1,j=1,cnt=0,ans=2e9;
while(i<=n || j<=n){
if(cnt!=m && jn+1){
break;
}
if(cnt==m){
if(ans>a[j-1].x-a[i].x){
ans=a[j-1].x-a[i].x;
}
vis[a[i].id]--;
if(vis[a[i].id]==0) cnt--;
i++;
}else{
vis[a[j].id];
if(vis[a[j].id]==1) cnt;
j++;
}
}
cout<<ans;
return 0;
}