对于这行代码,我只知道是优化cin和cout的速度,速度和scanf,printf差不多,但是同一份代码,我只修改了输入输出,c的时间是717ms,c++只要139ms,内存差不多都是15。
如果是用C++万能头,输入输出用scanf和printf也是要800多ms。
题目是codeforces的1679B.
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
```)
```c
#include <stdio.h>
typedef long long ll;
int s[200007],q[200007];
int main()
{
int n,m,i,j,z = -1,d;
ll sum = 0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&s[i]);
sum += s[i];
}
for(i=1;i<=m;i++)
{
ll a,b,c;
scanf("%lld%lld",&a,&b);
if(a == 1)
{
scanf("%lld",&c);
sum += c - (q[b]>z?s[b]:d);
s[b] = c;
q[b] = i;
}
else
{
d = b;
z = i;
sum = (ll)b*n;
}
printf("%lld\n",sum);
}
return 0;
}
```c++
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+7;
int s[N],q[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,m,i,j,z = -1,d;
ll sum = 0;
cin >> n >> m;
for(i=1;i<=n;i++)
{
cin >> s[i];
sum += s[i];
}
for(i=1;i<=m;i++)
{
ll a,b,c;
cin >> a >>b;
if(a == 1)
{
cin>>c;
sum += c-(q[b]>z?s[b]:d);
s[b] = c;
q[b] = i;
}
else
{
d = b;
z = i;
sum = (ll)b*n;
}
cout<<sum<<"\n";
}
return 0;
}
```
该回答引用ChatGPT
在 C++ 中,使用 iostream 库(包括 cin 和 cout)进行标准输入和输出时,由于默认情况下与 C 的 stdio 库不同,会对 stdio 进行同步(sync)操作。这意味着 iostream 库将使用 stdio 的缓冲区,这可能会减缓输入输出速度。因此,将 ios::sync_with_stdio(false); 放在代码的开头可以关闭同步,从而提高 iostream 的速度,但也可能会导致 iostream 和 stdio 之间数据不同步的问题。
此外,C++ 的 iostream 库本身就比 C 的 stdio 库稍微慢一些。因此,如果程序的输入输出较为频繁,使用 C 的 stdio 库可能比使用 C++ 的 iostream 库更快一些。
此外,使用 C++ 的万能头(#include <bits/stdc++.h>)也可能会导致程序运行速度变慢,因为这个头文件包含了许多库文件,导致编译器需要处理更多的代码,从而增加编译时间和执行时间。因此,最好只包含需要的库头文件。