Untitled
unknown
plain_text
14 days ago
2.2 kB
1
Indexable
Never
#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; } } }
Leave a Comment