1. 程式人生 > >bzoj1264: [AHOI2006]基因匹配Match

bzoj1264: [AHOI2006]基因匹配Match

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