zyc_bot @ 2024-02-27 19:03:31
rt,这份代码如何卡常,同时求一些卡常技巧
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
char *p1,*p2,buf[1<<20+5];
inline long long read(){
int x=0,f=1;
char c=gc();
while(!isdigit(c)){
if(c=='-')f=-1;
c=gc();
}while(isdigit(c)){
x=x*10+(c^48);
c=gc();
}return x*f;
}
inline int read1(){
int x=0;
char c=gc();
while(!isdigit(c)){
c=gc();
}while(isdigit(c)){
x=x*10+(c^48);
c=gc();
}return x;
}
const int N = 5e4 + 1;
int n, m, k;
int l, r;
long long v, a[N];
long long maxx;
int main() {
//scanf("%d%d", &n, &m);
n = read1(), m = read1();
while (m -- ) {
//scanf("%d", &k);
k = read1();
if (k == 1) {
l = read1(), r = read1(), v = read();
//scanf("%d%d%lld", &l, &r, &v);
for (register unsigned int i = l; i <= r; i++) a[i] += v;
}
if (k == 2) {
//scanf("%d%d", &l, &r);
l = read1(), r = read1();
reverse(a + l, a + r + 1);
}
if (k == 3) {
//scanf("%d%d", &l, &r);
l = read1(), r = read1();
maxx = a[l];
for (register unsigned int i = l; i <= r; i++)
maxx = max(a[i], maxx);
printf("%lld\n", maxx);
}
}
return 0;
}
by _T__T_ @ 2024-02-27 19:09:55
猜你做的
by liyixin0514 @ 2024-02-27 19:18:52
register
C++11 后没用了。
现代编译器会直接忽略你的 register 关键字,你自己认为的寄存器分配一般没有编译器直接跑寄存器分配算法来的聪明。此关键字于 C++11 被弃用,于 C++17 被删除。(来自 OI Wiki)
by zyc_bot @ 2024-02-27 20:02:22
@txppdd 你审题了吗?我问如何卡常,谁问你 register
有没有用了?老是有人那这个说事,你是觉得我不知道还是什么?请你不要恢复这些废话(原谅我语气有点激烈,因为每次卡常都有你这样的人什么都不回答在那叫还觉得很优越
by liyixin0514 @ 2024-02-27 21:53:31
@zyc_bot
您知道为什么还要写?
如果您做的是楼上的题目,那么我确实无法提供减小常数的方法,而且
如果不是该题,建议提供数据范围。
by zyc_bot @ 2024-02-28 20:56:34
@txppdd 不,事实证明这是有用的,有道题我用这个真的卡过去了,所以我很讨厌你们这些 nerd。另外,您知道无法帮我卡过或帮我优化常数何必回复?刷存在感还是涨优越感?