社区讨论
40pts TLE #8-#11 & #13-#20 求帮忙卡常
P11455[USACO24DEC] Cowdependence G参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mlq63f6g
- 此快照首次捕获于
- 2026/02/17 13:33 前天
- 此快照最后确认于
- 2026/02/18 11:32 昨天
提交记录:https://www.luogu.com.cn/record/263177332
思路和第一篇题解差不多。如果用 vector 实现的话更慢
CPP#include <iostream>
#include <vector>
#include <cmath>
#include <cstring>
using namespace std;
int ans[100001],n,a[100001],tmp[100001];
int f(int x) {
if(ans[x]) return ans[x];
int i,cnt=0,len;
memset(tmp,-1,sizeof(tmp));
for(i=1;i<=n;i++) if(i>tmp[a[i]]) {cnt++;tmp[a[i]]=i+x;}
return cnt;
}
int main() {
ios::sync_with_stdio(0);cin.tie(0);
int i,l,r,mid,x;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
x=min(n,2*(int)sqrt(n*log(n)/log(2)));
for(i=1;i<x;i++) ans[i]=f(i);
while(x<=n) {
ans[x]=f(x);l=x;r=n;
while(l<r) {
mid=(l+r+1)>>1;
if((ans[mid]=f(mid))==ans[x]) l=mid;
else r=mid-1;
}
for(i=x+1;i<=l;i++) ans[i]=ans[x];
x=l+1;
}
for(i=1;i<=n;i++) cout<<ans[i]<<'\n';
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...