bzoj1264: [AHOI2006]基因匹配Match
阿新 • • 發佈:2018-02-02
hang 最大 ostream ring scan pac gpo urn sca
這題真的狠玄學。
想到一個O(n^2)的的做法,然而肯定是要掛的。
然後我就是mod咯。
把答案插進樹狀數組維護最大值。要倒著插入避免後面的繼承了前面的。
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int n,s[110000]; int lowbit(int x){return x&-x;}void change(int x,int k) { while(x<=n) { s[x]=max(s[x],k); x+=lowbit(x); } } int getsum(int x) { int ret=0; while(x>=1) { ret=max(s[x],ret); x-=lowbit(x); } return ret; } //----------bit------------ int pos[21000][10],plen[21000]; int main() { scanf("%d",&n);n*=5; memset(plen,0,sizeof(plen)); int x; for(int i=1;i<=n;i++) { scanf("%d",&x); pos[x][++plen[x]]=i; } int ans=0; memset(s,0,sizeof(s)); for(int i=1;i<=n;i++) { scanf("%d",&x); for(int j=5;j>=1;j--) { int d=getsum(pos[x][j]-1)+1; ans=max(ans,d); change(pos[x][j],d); } } printf("%d\n",ans); return 0; }
bzoj1264: [AHOI2006]基因匹配Match