CF1167E Range Deleting(雙指標)
阿新 • • 發佈:2020-07-29
本題如果刪除l-r,那麼l-r+1...這些也都是滿足的,因此具有單調性。
所以我們考慮列舉l,r,對於判斷,維護四個陣列
分別為l[],當前數出現的最早時間
r[],當前數出現的最晚時間
ll[],1-i出現的最早時間
rr[],i-n出現的最晚時間
對於滿足的狀態要分三種情況討論
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e6+10; const int mod=998244353; int ll[N],rr[N],l[N],r[N]; int a[N]; intView Codemain(){ ios::sync_with_stdio(false); int i; int n,x; cin>>n>>x; memset(l,0x3f,sizeof l); memset(r,-1,sizeof r); memset(ll,0x3f,sizeof ll); memset(rr,-1,sizeof rr); for(i=1;i<=n;i++){ cin>>a[i]; l[a[i]]=min(l[a[i]],i); r[a[i]]=i; } for(i=1;i<=x;i++){ rr[i]=max(r[i],rr[i-1]); } for(i=x;i>=1;i--){ ll[i]=min(l[i],ll[i+1]); } int k=x; while(k>1&&ll[k]>=r[k-1]) k--; LL ans=0; for(i=0;i<x;i++){ if(i&&(l[i]<rr[i-1]))break; while(k<=i+1||ll[k]<rr[i]) k++; ans+=x-k+2; } cout<<ans<<endl; return 0; }