Untitled
unknown
plain_text
a year ago
2.2 kB
11
Indexable
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+7;
const int INF=1e9;
int n;
int a[N];
int t[N*4];
int tmn[N*4];
int t2[N*4];
int t2mn[N*4];
void upd(int ind, int val,int u=1,int ul=1,int ur=n){
if(ul==ur){
t[u]+=val;
tmn[u]+=val;
return;
}
int um=(ul+ur)/2;
if(ind<=um)upd(ind,val,u*2,ul,um);
else upd(ind,val,u*2+1,um+1,ur);
t[u]=max(t[u*2],t[u*2+1]);
tmn[u]=min(tmn[u*2],tmn[u*2+1]);
}
int getmx(int l,int r,int u=1,int ul=1,int ur=n){
if(r<ul || ur<l)return 0;
if(l<=ul&&ur<=r)return t[u];
int um=(ul+ur)/2;
return max(getmx(l,r,u*2,ul,um),getmx(l,r,u*2+1,um+1,ur));
}
int getmn(int l,int r,int u=1,int ul=1, int ur=n){
if(r<ul || ur<l)return INF;
if(l<=ul&&ur<=r)return tmn[u];
int um=(ul+ur)/2;
return min(getmn(l,r,u*2,ul,um),getmn(l,r,u*2+1,um+1,ur));
}
void upd2(int ind, int val,int u=1,int ul=1,int ur=n){
if(ul==ur){
t2[u]+=val;
t2mn[u]+=val;
return;
}
int um=(ul+ur)/2;
if(ind<=um)upd2(ind,val,u*2,ul,um);
else upd2(ind,val,u*2+1,um+1,ur);
t2[u]=max(t2[u*2],t2[u*2+1]);
t2mn[u]=min(t2mn[u*2],t2mn[u*2+1]);
}
int getmx2(int l,int r,int u=1,int ul=1,int ur=n){
if(r<ul || ur<l)return 0;
if(l<=ul&&ur<=r)return t2[u];
int um=(ul+ur)/2;
return max(getmx2(l,r,u*2,ul,um),getmx2(l,r,u*2+1,um+1,ur));
}
int getmn2(int l,int r,int u=1,int ul=1, int ur=n){
if(r<ul || ur<l)return INF;
if(l<=ul&&ur<=r)return t2mn[u];
int um=(ul+ur)/2;
return min(getmn2(l,r,u*2,ul,um),getmn2(l,r,u*2+1,um+1,ur));
}
signed main(){
int tt;
cin>>tt;
while(tt--){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
upd(a[1],1);
for(int i=2;i<=n;i++){
upd2(a[i],1);
}
int l1=1;
int l2=n-1;
vector<pair<int,int>>ans;
if(getmx(1,l1)==getmn(1,l1) && getmx2(1,l2)==getmn2(1,l2) && getmx(1,l1)==1 && getmx2(1,l2)==1)ans.push_back({l1,l2});
for(int i=2;i<n;i++){
l1++;
l2--;
upd(a[i],1);
upd2(a[i],-1);
if(getmx(1,l1)==getmn(1,l1) && getmx2(1,l2)==getmn2(1,l2) && getmx(1,l1)==1 && getmx2(1,l2)==1)ans.push_back({l1,l2});
}
cout<<ans.size()<<'\n';
for(auto to:ans)cout<<to.first<<" "<<to.second<<'\n';
for(int i=1;i<=n*4;i++){
t[i]=0;
t2[i]=0;
}
}
}Editor is loading...
Leave a Comment