论如何输入超过10⁶个数据
2026-05-03 20:08:36
发布于:北京
本人也是第一次发学习讨论的,请大家多多点赞(可以刷刷罐头,本人不在意)!
有些题目是需要输入超过10⁶个数据,如果用cin或scanf电脑可能会开始抽烟,比如有些题:
提示
数据保证,1≤n≤10⁶,0≤ai ,q≤10⁹ ,1≤m≤10⁶
那要怎样输入呢?
可以用较快的io输入:
我用最简单、最通俗、不绕弯的方式给你讲明白!
一句话总结
这两句是 C++ 用来加速 cin /cout 输入输出的开关
数据量大的时候(比如 100 万个数),不加会超时,加了才能 AC!
逐句讲(超简单)
1.
ios::sync_with_stdio(false);
作用:
关闭 C 和 C++ 输入输出的同步
通俗解释:
C 有 scanf/printf
C++ 有 cin/cout
默认情况下,它们是互通、同步的 → 很慢
加这句 = 让 cin 独立工作,不再等 C 的输入输出 → 速度暴快
你只要记住:
数据量大 → 必须关!
2.
cin.tie(0);
作用:
把 cin 和 cout 解绑
通俗解释:
默认情况下:
每次 cin 输入前,都会强制刷新 cout 输出
刷新很花时间!
加这句 = 不让它们互相干扰
输入就专心输入,输出就专心输出 → 更快
最最最重要的结论(背下来)
只要题目里出现:
n ≥ 10 万
m ≥ 10 万
输入输出量很大
你就直接在 main 函数最开头写:
ios::sync_with_stdio(false);
cin.tie(0);
不用管原理,背下来就能提速 10~100 倍!
最简单记忆口诀
量大必加两行字,cin/cout 快十倍!
直白讲清楚:加这两行 和 不加,差别有多大
一、先记死两句话
cpp
运行
iossync_with_stdio(false);
cin.tie(0);
作用:给 cin、cout 极速提速
二、为什么默认 cin/cout 很慢?
iossync_with_stdio (true) 默认开启
C++ 的 cin/cout 默认要和 C 的 scanf/printf 保持同步
两边数据要互相等待、对齐,多了很多多余操作,速度被拖得很慢
cin.tie (0) 默认是绑定状态
默认:每次用 cin 读入前,都先把 cout 缓冲区清空刷新
你每输一个数,都要先刷一遍输出,浪费大量时间
三、加上两句做了什么
ios::sync_with_stdio(false);
断开和 C 语言 IO 的同步,cin/cout 自己单独跑,不等待,速度飙升
cin.tie(0);
把 cin 和 cout 解绑
不再每次输入前都刷新输出,省去无用操作
四、速度对比(真实差距)
假设读入 100 万个整数:
表格
写法 耗时 能否过大数据题
普通 cin/cout 不加两行 很慢,容易超时 ❌ 超时挂掉
加了两行加速 飞快,和 scanf 差不多 ✅ 稳稳通过
竞赛里:
n,m 到 1e5、1e6 级别,不加必超时,加了直接稳过
五、使用注意(很重要)
一旦写了:
ios::sync_with_stdio(false);
cin.tie(0);
就不要混用
cin、scanf、cout 和 printf
会错乱、读错数据、输出乱序
只用一套:全程只写 cin /cout 就没问题。
六、固定模板直接背
以后只要做大数据、二分、多组询问题,main 第一行先写:
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
// 后面正常写代码就行
}
无脑套用,不用理解原理,记住量大必加就行。
全部评论 3
d
3天前 来自 浙江
0为什么自己给自己点赞
5天前 来自 广东
0不要再用 AI 写这么基础的文章了
5天前 来自 广东
0

























有帮助,赞一个