__youzimo2014__ @ 2024-11-28 19:06:48
record
尝试将 #9 1.04s -> 1.00s
有没有什么方法吗?
Code:
#include <bits/stdc++.h>
using namespace std;
int a[1000005];
int max_ans[1000005], min_ans[1000005];
map<int, int> data;
int main() {
ios::sync_with_stdio(false);
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int right = k+1;
for (int i = 1; i <= k; i++) {
if (data.find(a[i]) != data.end()) {
data[a[i]]++;
} else {
data[a[i]] = 1;
}
}
min_ans[1] = data.begin() -> first;
max_ans[1] = data.rbegin() -> first;
while (right <= n){
map<int, int>::iterator last_iter = data.find(a[right-k]),
this_iter = data.find(a[right]);
(last_iter -> second)--;
if ((last_iter -> second) == 0) {
data.erase(last_iter);
}
if (this_iter == data.end()) {
data[a[right]] = 1;
} else {
(this_iter -> second)++;
}
min_ans[right-k+1] = data.begin() -> first;
max_ans[right-k+1] = data.rbegin() -> first;
right++;
}
for (int i = 1; i <= n-k+1; i++) {
cout << min_ans[i] << ' ';
}
cout << endl;
for (int i = 1; i <= n-k+1; i++) {
cout << max_ans[i] << ' ';
}
return 0;
}
by __youzimo2014__ @ 2024-11-28 19:10:25
过了过了,我把 cout << endl
改成了 cout << "\n"
by __youzimo2014__ @ 2024-11-28 19:12:04
好像也没有 100% 过,都是靠运气
有没有大佬可以帮我卡到 100% 过?
by Glacial_Shine @ 2024-11-28 19:15:46
map 改成 unordered_map 试下
by Glacial_Shine @ 2024-11-28 19:17:23
if (data.find(a[i]) != data.end()) {
data[a[i]]++;
} else {
data[a[i]] = 1;
}
这个地方改成下面这样试试
data[a[i]]++;
by Vector_Li @ 2024-11-28 19:18:52
@youzimo2014 cin.tie(nullptr)
也有用!
by __youzimo2014__ @ 2024-11-28 19:26:17
@Glacial_Shine 谢谢,我试试
by __youzimo2014__ @ 2024-11-28 19:29:58
@Vector_Li 谢谢,但是 cin.tie(nullptr)
似乎没有作用,反而 897ms -> 1.20s
@Glacial_Shine 谢谢,我改了 data[a[i]]++;
就基本上都在 800多ms到900多ms了。
by Vector_Li @ 2024-11-28 19:33:54
@youzimo2014 我靠,这我还是第一次遇到,您可以讲一下为什么会变慢吗?
by __youzimo2014__ @ 2024-11-28 19:38:34
@Vector_Li 我也不知道啊,但是之前卡常的时候也遇到过。
之前我卡常的时候把 cin.tie
和 cout.tie
都删掉了,然后就过了,就很奇怪,我去网上看看吧。
明明是蓝钩大佬,咋感觉太谦虚了啊?
by __youzimo2014__ @ 2024-11-28 19:41:06
@Vector_Li 听说是因为把 cin
和 cout
的缓冲区隔开了,所以导致缓存利用率变低,内存效率自然就变低了,然后就导致程序变慢(只是听说,我其实一开始不明白为什么)