这次我做这道题时,一开始写了一个这样的代码:
#include<bits/stdc++.h>
using namespace std;
int a[111111];
```cpp
map<int,int> m;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n,w;
cin>>n>>w;
for(int i = 1;i <= n;i++)cin>>a[i];
for(int i = 1;i <= n;i++){
m[a[i]]++;
int sum = 0;
for(int j = 600;j >= 0;j--){
sum+=m[j];
if(sum>=max(1,i*w/100)){
cout<<j<<' ';
break;
}
}
}
return 0;
//O(600n)
}
然后嘛。。。。。。
【这是一张图,看不见勿喷,谢谢!】
我琢磨了30分钟,突然看了这一句:
map<int,int> m;
对哦,map 会带一个 O(logn) 的时间,会不会就是这个 map 搞的?
所以,换了一个代码:
#include<bits/stdc++.h>
using namespace std;
int a[111111];
int m[605];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n,w;
cin>>n>>w;
for(int i = 1;i <= n;i++)cin>>a[i];
for(int i = 1;i <= n;i++){
m[a[i]]++;
int sum = 0;
for(int j = 600;j >= 0;j--){
sum+=m[j];
if(sum>=max(1,i*w/100)){
cout<<j<<' ';
break;
}
}
}
return 0;
//O(600n)
}
【跟上面一样,这张图看不见勿喷,谢谢!】
一片绿色,颇为壮观!
总而言之,O(logn) 也是时间,下次超时就找找细节吧!
如果觉得对你有帮助,就点个赞吧!