2 条题解

  • 0
    @ 2025-10-8 17:12:05
    #define re register int 
    #define il inline
    #define ll long long
    using namespace std;
    const int inf=1e9;
    il int read(){
    	char c=getchar();int z=0,f=1;
    	while(c!='-'&&(c>'9'||c<'0')) c=getchar();
    	if(c=='-') f=-1,c=getchar();
    	while(c>='0'&&c<='9') z=(z<<1)+(z<<3)+c-'0',c=getchar();
    	return z*f;
    }
    int R,n;
    int mp[1100002],a[1100002];
    int ans;
    struct ANS{
    	int x,y;
    }q[1100002];
    il void dfs(int l,int now,int r,int sum){
    	if(r>=R) return ;
    	if(mp[now]<l) return ;
    	if(r==mp[now]&&sum>1&&sum==r-l+1) {
    		q[++ans].x=l,q[ans].y=r,R=min(R,r);
    		return ;
    	}
    	dfs(l,now+1,max(r,mp[now+1]),sum+1);
    }
    int main (){
    	//Fuyuki是我们的红太阳 
    	freopen("empodia.in","r",stdin);
    	freopen("empodia.out","w",stdout);
    	n=read();R=n+1;
    	for(re i=1;i<=n;i++) a[i]=read(),mp[a[i]]=i;
    	for(re i=n-2;i>=1;i--) 
    		dfs(i,a[i],i,1);
    	cout<<ans<<'\n';
    	for(re i=ans;i>=1;i--)
    		cout<<q[i].x<<' '<<q[i].y<<'\n';
    	return 0;
    }
    
    • 0
      @ 2025-10-8 17:11:51
      #include <bits/stdc++.h>
      #define re register int 
      #define il inline
      #define ll long long
      using namespace std;
      const int inf=1e9;
      il int read(){
      	char c=getchar();int z=0,f=1;
      	while(c!='-'&&(c>'9'||c<'0')) c=getchar();
      	if(c=='-') f=-1,c=getchar();
      	while(c>='0'&&c<='9') z=(z<<1)+(z<<3)+c-'0',c=getchar();
      	return z*f;
      }
      int R,n;
      int mp[1100002],a[1100002];
      int ans;
      struct ANS{
      	int x,y;
      }q[1100002];
      il void dfs(int l,int now,int r,int sum){
      	if(r>=R) return ;
      	if(mp[now]<l) return ;
      	if(r==mp[now]&&sum>1&&sum==r-l+1) {
      		q[++ans].x=l,q[ans].y=r,R=min(R,r);
      		return ;
      	}
      	dfs(l,now+1,max(r,mp[now+1]),sum+1);
      }
      int main (){
      	//Fuyuki是我们的红太阳 
      	freopen("empodia.in","r",stdin);
      	freopen("empodia.out","w",stdout);
      	n=read();R=n+1;
      	for(re i=1;i<=n;i++) a[i]=read(),mp[a[i]]=i;
      	for(re i=n-2;i>=1;i--) 
      		dfs(i,a[i],i,1);
      	cout<<ans<<'\n';
      	for(re i=ans;i>=1;i--)
      		cout<<q[i].x<<' '<<q[i].y<<'\n';
      	return 0;
      } 
      • 1

      信息

      ID
      6639
      时间
      1000ms
      内存
      128MiB
      难度
      10
      标签
      递交数
      3
      已通过
      1
      上传者