min和max不是iostream里的吗?你定义两个函数,不用define试试,我不是经常用define所以不是太懂
by ___I_AK_IOI @ 2018-07-20 23:04:58
```cpp
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) < (b) ? (b) : (a))
```
这样`define`即可AC。估计是运算符优先级的锅吧。`define`的时候多加几个括号,或者使用`inline`函数比较好。
@[wsm000](/space/show?uid=32196)
by cqqqwq @ 2018-07-20 23:07:03
楼上强啊!!!,确实你这种优先级会很低但是感觉你套对了,也许我是蒟蒻把。。。
by ___I_AK_IOI @ 2018-07-20 23:09:18
的确,define要注意优先级。
但是更要注意的是,最好不要define max和min
by 小粉兔 @ 2018-07-20 23:24:21
比如
```
int func1(){
static int x=0;
++x;
return x;
}
int func2(){
static int x=1;
++x;
return x;
}
```
然后你
```
printf("%d",min(func1(),func2());
```
会输出`2`
by 小粉兔 @ 2018-07-20 23:26:07
讲个笑话:有人在线段树中用了 define,然后就 T 飞了。
```
#define max(a,b) a > b ? a : b
ll query(int k, int l, int r) {
if (tree[k].l == l && tree[k].r == r) {
return tree[k].mx;
}
int mid = (tree[k].l + tree[k].r) >> 1;
if (mid >= r) {
return query(k << 1, l, r);
} else if (mid < l) {
return query(k << 1 | 1, l, r);
} else {
return max(query(k << 1, l, mid), query(k << 1 | 1, mid + 1, r));
}
}
```
by hellomath @ 2018-07-20 23:28:16
不过不是我
by hellomath @ 2018-07-20 23:28:25
@[陈启乾](/space/show?uid=57601)
inline好像在之后还要加int double等类型吧。。。
我直接这样:
```
inline max(int x,int y)
```
在本地可以跑,但是在你谷上却是CE...
如果这样:
```
inline int max(int x,int y)
int inline max(int x,int y)
```
这两种编译才会通过
请问大佬,这是编译器的锅吗?
by nothingness @ 2018-07-20 23:29:54
@[nothingness](/space/show?uid=31317) 是的
by GNAQ @ 2018-07-20 23:42:44
不是编译器的锅,是我说的不太清楚。
`inline`是修饰函数的。你只能在一个函数前面加上`inline`限定。
比如:
```cpp
inline int max(int a,int b){
return a>b?a:b;
}
```
@[nothingness](/space/show?uid=31317)
by cqqqwq @ 2018-07-20 23:44:13