两题都没做出来,6D的dp到现在我还是有点没理解,先留着吧。
6E看到最后才弄懂题意,就是找出最长连续子串长度和数量。
网上看到说用线段树(segment-tree),从来没见过的数据结构,表示查了好久
可以参看这篇文章看看,虽说看了好像对线段树有点认识了,但是放在这题我还是没什么思路。
后来去cf上看了看前几名提交的代码,不禁佩服实在是太精炼了。贴个吧。
#include#include int a[100100],c[100100],n,k,b,m,p;std::multiset s;int main(){ scanf("%d%d",&n,&k); for(int i=0;i k)s.erase(s.find(a[b++])); if(i-b+1==m) c[p++]=b; else if(i-b+1>m) m=i-b+1,c[0]=b,p=1; } printf("%d %d\n",m,p); for(int i=0;i