n)求出mex(1,i)(1<=i<=n):
雖然0
<=ai<=10^9,但只有n個數,所以mex一定小於等於n
for(long
long j=1;j<=n;j++)}}
顯然mex是單調不下降的,
接著用線段樹維護mex。
如果刪掉a[i],從下乙個mex比a[i]大的位置到下乙個a[i]的位置之前的mex都會改變,都會變成a[i]。
所以用線段樹維護區間最大mex以及區間mex和。
#include
#include
#include
#include
#include
#include
#include
const long
long maxlongint=2147483647;
const long
long mo=1000000007;
const long
long n=2010000;
using namespace std;
long
long a[n],n,ans=0,next[n];
long
long bz[n]=;
struct ddx
tree[n*4];
long
long put(long
long v,long
long l,long
long r,long
long x,long
long y)
long
long mid=(l+r)/2;
if(x<=mid)
put(v*2,l,mid,x,y);
else
put(v*2+1,mid+1,r,x,y);
tree[v].sum=tree[v*2].sum+tree[v*2+1].sum;
tree[v].mxe=max(tree[v*2].mxe,tree[v*2+1].mxe);
}long
long findpos(long
long v,long
long l,long
long r,long
long x)
long
long mid=(l+r)/2;
if(tree[v].lazy>=0)
long
long o=0;
if(tree[v*2].mxe>x)
o=findpos(v*2,l,mid,x);
else
o=findpos(v*2+1,mid+1,r,x);
tree[v].sum=tree[v*2].sum+tree[v*2+1].sum;
tree[v].mxe=max(tree[v*2].mxe,tree[v*2+1].mxe);
return o;
}long
long change(long
long v,long
long l,long
long r,long
long x,long
long y,long
long z)
long
long mid=(l+r)/2;
if(tree[v].lazy>=0)
if(y<=mid)
change(v*2,l,mid,x,y,z);
else
if(x>mid)
change(v*2+1,mid+1,r,x,y,z);
else
tree[v].sum=tree[v*2].sum+tree[v*2+1].sum;
tree[v].mxe=max(tree[v*2].mxe,tree[v*2+1].mxe);
}long
long find(long
long v,long
long l,long
long r,long
long x,long
long y)
long
long mid=(l+r)/2;
if(tree[v].lazy>=0)
if(y<=mid)
find(v*2,l,mid,x,y);
else
if(x>mid)
find(v*2+1,mid+1,r,x,y);
else
tree[v].sum=tree[v*2].sum+tree[v*2+1].sum;
tree[v].mxe=max(tree[v*2].mxe,tree[v*2+1].mxe);
}int main()
}for(long
long i=1;i<=n;i++)
if(!next[i])
next[i]=n+1;
memset(bz,true,sizeof(bz));
for(long
long i=0;i<=n*4-1;i++)
tree[i].lazy=-1;
long
long top=0;
ans=0;
for(long
long j=1;j<=n;j++)
}put(1,1,n,j,top);
}for(long
long i=2;i<=n;i++)
find(1,1,n,i,n);
}printf("%lld",ans);
}
NOIP2016提高A組8 11 錢倉
發現,一定有乙個點作為起點,所有的路徑都不經過這個起點。接著貪心求答案,如果c i 1 將其中ci 1個錢往後 鋪 易證x 2 y2 x y 2 那麼維護乙個佇列,先進先出,就能保證最小。include include include include include include include ...
NOIP2016提高A組8 11 錢倉
發現,一定有乙個點作為起點,所有的路徑都不經過這個起點。接著貪心求答案,如果 c i 1 將其中 c i 1 個錢往後 鋪 易證 x 2 y 2 x y 2 那麼維護乙個佇列,先進先出,就能保證最小。include include include include include include in...
NOIP2016提高A組8 11 自然數
第一行n 第二行n個數 答案3 0 1 3 n 200000 a i 109 50分暴力明顯,用標記陣列隨便yy 但是你可能在想要離散化,其實凡是大於n的都直接等於n就行了,mex最大就是n 想 如果知道 1,n 的mex,能不能求到 2,n 顯然mex 1,i 是單調遞增的,當第乙個數被刪掉時,如...