70分,其余TLE,求调!

P2058 [NOIP2016 普及组] 海港

# 代码 ```cpp #include<bits/stdc++.h> using namespace std; long long n,m[100003],k[100003]={1},ans=0,o[100003]={0},v=1,z[300003]={0}; int main() { scanf("%lld",&n); for(int i=1;i<=n;i++) { scanf("%lld%lld",&m[i],&k[i]); k[i]+=k[i-1]; for(int j=k[i-1]+1;j<=k[i];j++) { long long x; scanf("%lld",&x); if(o[x]==0) { ans++; } z[j]=x; o[x]++; } while(m[i]-m[v]>=86400) { for(int j=k[v-1]+1;j<=k[v];j++) { o[z[j]]--; if(o[z[j]]==0) { ans--; } } v++; } printf("%lld\n",ans); } return 0; } ``` 自己看看吧
by oier04 @ 2023-08-27 16:48:47


@[Brilliant11001](/user/602372) 之前做的了,想不起思路了。
by oier04 @ 2023-08-27 16:55:02


@[oier04](/user/747109) 谢谢好兄弟,有思路了
by Brilliant11001 @ 2023-08-27 17:10:02


不用谢
by oier04 @ 2023-08-27 17:38:45


其实不用太多循环,容易TLE。这是代码,自己看看吧。 ``` #include <iostream> using namespace std; struct node { int from; int timee; }p[300006]; int f[300006]; int main() { long long n,t,k,front=0,rear=0,ans=0; cin>>n; for(int i=1;i<=n;i++) { cin>>t>>k; for(int j=1;j<=k;j++) { cin>>p[rear].from; p[rear].timee=t; f[p[rear].from]++; if(f[p[rear].from]==1) { ans++; } rear++; } while(p[rear-1].timee-p[front].timee>=86400) { f[p[front].from]--; if(f[p[front].from]==0) { ans--; } front++; } cout<<ans<<endl; } return 0; } ```
by xzwdqjdx @ 2023-10-06 11:34:13


|