关于scanf与cin哪个快的问题
一开始入c++的时候成天跑cin,cout
直到有一天用cin,cout超时
才知道scanf比cin快的多
但是后来又听说加了ios::sync_with_stdio(false);的cin跟飞一样
那么到底哪个快呢?
咱们来做个小测试
题目选择:https://www.luogu.org/problem/show?pid=3368#sub
树状数组模板2(因为这题数据比较大)
首先是龟速的cin与cout
成功的T掉三个点
=.=
那么scanf呢??
完美的完成任务!!
身负众望的ios::sync_with_stdio(false);呢??
见证奇迹的时刻。。。
速度虽然不及scanf
但是也是可以AC的
另外不得不提一下超神的读入优化
快于scanf
综上所述:
如果实在懒得敲读入优化
还是乖乖的用scanf吧。。
附代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int n,m;
int a[MAXN];
int tree[MAXN];
int lowbit(int p)
{return p&(-p);} void interval_increase(int x,int v)
{
for(int i=x;i>;i=i-lowbit(i))
{
tree[i]+=v;
}
} int point_ask(int p)
{
int ans=a[p];
for(int i=p;i<=n;i=i+lowbit(i))
{
ans=ans+tree[i];
}
return ans;
}
int main()
{
//ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=m;i++)
{
int how;
cin>>how;
if(how==)// 增加
{
int x,y,v;
cin>>x>>y>>v;
interval_increase(y,v);
interval_increase(x-,-v);
}
else
{
int p;
cin>>p;
cout<<point_ask(p)<<endl;
}
}
return ;
}
龟速的cin
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int n,m,p;
int tree[MAXN];//
int lowbit(int p)
{
return p&(-p);
}
void point_increase(int w,int v)
{
for(int i=w;i<=n;i=i+lowbit(i))
tree[i]=tree[i]+v;
return ;
}
int interval_ask(int x)
{
int ans=;
for(int i=x;i!=;i=i-lowbit(i))
{
ans=ans+tree[i];
}
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&p);
point_increase(i,p);
}
for(int i=;i<=m;i++)
{
scanf("%d",&p);
if(p==)// 加
{
int x,y;
scanf("%d%d",&x,&y);
point_increase(x,y);
}
else// 求和
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",interval_ask(y)-interval_ask(x-));
}
}
return ;
}
nice的scanf
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int n,m;
int a[MAXN];
int tree[MAXN];
int lowbit(int p)
{return p&(-p);} void interval_increase(int x,int v)
{
for(int i=x;i>;i=i-lowbit(i))
{
tree[i]+=v;
}
} int point_ask(int p)
{
int ans=a[p];
for(int i=p;i<=n;i=i+lowbit(i))
{
ans=ans+tree[i];
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=m;i++)
{
int how;
cin>>how;
if(how==)// 增加
{
int x,y,v;
cin>>x>>y>>v;
interval_increase(y,v);
interval_increase(x-,-v);
}
else
{
int p;
cin>>p;
cout<<point_ask(p)<<endl;
}
}
return ;
}
还不错的cin优化
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int n,m;
int a[MAXN];
int tree[MAXN];
int lowbit(int p)
{return p&(-p);} int read(int &n)
{
char ch=' ';int q=,w=;
for(;(ch!='-')&&((ch<'')||(ch>''));ch=getchar());
if(ch=='-')w=-,ch=getchar();
for(;ch>='' && ch<='';ch=getchar())q=q*+ch-;
n=q*w; return n;
} void interval_increase(int x,int v)
{
for(int i=x;i>;i=i-lowbit(i))
{
tree[i]+=v;
}
} int point_ask(int p)
{
int ans=a[p];
for(int i=p;i<=n;i=i+lowbit(i))
{
ans=ans+tree[i];
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
read(n);
read(m);
for(int i=;i<=n;i++)
read(a[i]);
for(int i=;i<=m;i++)
{
int how;
read(how);
if(how==)// 增加
{
int x,y,v;
read(x);
read(y);
read(v);
interval_increase(y,v);
interval_increase(x-,-v);
}
else
{
int p;
read(p);
printf("%d",point_ask(p));
putchar('\n');
}
}
return ;
}
飞速的读入优化
关于scanf与cin哪个快的问题的更多相关文章
- scanf和cin的差异
scanf和cin的差异 引例:http://www.cnblogs.com/shenben/p/5516996.html 大家都知道,在C++中有两种输入.输出方式—scanf和cin,但是,它们之 ...
- cin 和scanf,scanf比cin快很多
//#include <iostream> #include <stdio.h> //#include <fstream> //using namespace st ...
- scanf 和cin 的区别
笔试的时候经常遇到突然string s;cin>>s; 有的时候编译会错误,不知道为什么. 今天在练习枚举类型的时候,也遇到这样一个问题. enum weekday{Monday,Tues ...
- 对于scanf和cin的输入输出速度的验证
本文为https://www.byvoid.com/zhs/blog/fast-readfile的验证性文章 --------------------------------------------- ...
- mac 下 sublime text 运行c++/c 不能使用scanf/cin
{ "cmd": ["g++", "${file}", "-o", "${file_path}/${file_ ...
- scanf 与 cin 的区别
在论坛上看到有人提出一个如下的问题,在此总结一下. 原问题: http://topic.csdn.net/u/20110414/22/90d0606c-9876-48e4-9b69-bd8bd8a41 ...
- 关于scanf 与 cin gets(),getline()......输入输出字符串的区别
很对人对于字符串的输入输出一直是比较模糊的,今天总结一下几个常用的输入流符号对于输入字符串时的区别: 1.scanf(),首先 它遇到空格或回车键(\n)就会结束,并且会将回车符算入字符串中: 2.c ...
- scanf和cin性能的比较
我的实验机器配置是: 处理器:Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz 2.40GHz 随机访问存储器:4.00GB 操作系统:Windows10 集成开发环境 ...
- getchar(),scanf(),gets(),cin,输入字符串
#include<iostream>#include<stdio.h>#include<string.h>#include<string>using n ...
随机推荐
- 856. Score of Parentheses
Given a balanced parentheses string S, compute the score of the string based on the following rule: ...
- Android精通之OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架
版权声明:未经博主允许不得转载 OrmLite基础知识 什么是OrmLite框架,在我没用这个框架时,不知道它有多好,用了才知道很方便哦,为了提供开发效率,Android开发者需要懂得运行多种框架进行 ...
- [Mac]如何让两个窗口各占半个屏幕
OS X中的拆分视图El Capitan或更高版本允许您使用两个应用程序填充Mac屏幕,而无需手动移动和调整窗口大小. 进入拆分视图 按住 窗口左上角的全屏按钮 . 当您按住按钮时,窗口会缩小,您可 ...
- centos7上安装cacti监控
简介 在企业网络运维过程中,管理员必须时刻关注服务器的运行状态,如CPU.内存.磁盘空间使用情况等.为了能够及时的发现问题,尽量减少故障的发生.当网络中的设备,服务器等数量较多时,可以部署一套监控系 ...
- C# log4net 使用
利用log4net写入异常类日志,在网上搜索一阵之后便想记录下来,以便后期使用,同时希望帮到大家. 第一步:使用管理NuGet程序包导入log4net.dll 导入成功后会在引用下显示相应的log4 ...
- Django --ORM常用的字段和参数 多对多创建形式
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- scala-jdbc-scalike操作jdbc数据库
1, 引入maven依赖 <!-- 使用 sclaikeJDBC --> <dependency> <groupId>org.scalikejdbc</gro ...
- REX:EOS资源租赁平台详解
关键字:REX,资源交易,资源租赁,系统费用,bancor,成熟期,EOS,eosio.system,voting EOSIO 智能合约在v1.6.0版本增加了一个system合约使用的例子,可提供E ...
- SpringMVC redirect中文乱码问题
在使用"redirect:xxx.do?param=中文"时会出现乱码问题,解决方案如下: 使用model.addAttribute来替代直接拼接参数.如下: @RequestMa ...
- leetcode — remove-nth-node-from-end-of-list
/** * Source : https://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/ * * Created by lve ...