简单说, 没有, 计算机没有魔法, 必须要每次判断! (每次元素加一属于你写在循环里的执行语句, 这个逃不掉的)
但你要知道这世界上还有一个神器的技术叫 "分支预测", 就是硬件假定你 N 次循环条件都成立, 那么先执行了后续的指令同时并行地进行判断; 如果分支条件确实成立, 那么继续; 如果分支条件不成立, 就会丢弃当前的计算结果, 重新走一遍正确的.
这部分内容与 C 语言或者数据结构无关, 去找点 "计算机体系结构" 之类的书吧 (不过也都是皮毛, 重要的是硬件实现).
这个程序设计的时候就是:
在输入的数字大于20或者小于1时,显示“错误,在1~20之间”
在输入数字是1~20之间,而且不正确时才显示“不对”
所以你输入一个9就会显示“不对”,输入30是不会显示“不对”的
那你就用线段树呗,给区间做个标记值加1就好
你还没学到位,数据结构你懂不懂