我在卡常的时候,它给我一个编译错误:
54 14 …… [Error] inlining failed in call to always_inline 'int getc()': target specific option mismatch
我的代码:
#include <stdio.h>
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
#define reg register
#define con const
#define f_inline inline __attribute__((always_inline))
char buf[67108864], *p1 = buf, *p2 = buf;
f_inline int getc(){ // 莫名其妙不能 f_inline 了
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 67108864, stdin), p1==p2) ? EOF : *p1++;
}
f_inline int uread(){
reg int x(0), ch;
while ((ch = getc()) < 48);
do{
x = (x << 1) + (x << 3) + (ch ^ 48);
}while ((ch = getc()) > 47);
return x;
}
char pbuf[2097152];
int p3(-1);
f_inline void flush(){
fwrite(pbuf, 1, p3+1, stdout);
p3 = -1;
}
void uprint(reg con int &x){
reg con int tmp(x/10); // 留着以后用
if (tmp) uprint(tmp);
pbuf[++p3] = x-(tmp<<1)-(tmp<<3)+48; // 技巧,x-x/10*10 等价于 x%10
}
int a[100000];
int main(){
freopen("1.in", "r", stdin);
freopen("1.out", "w", stdout);
reg con int n(uread());
reg int m(uread()), i(0);
do{
a[i] = uread();
}while ((++i) < n);
do{
reg con int opt(uread()), l(uread()), r(uread()), x(uread());
reg int j(l-1);
if (opt == 1){
do{
a[j] > x ? a[j] -= x : 0;
}while ((++j) < r);
}else{
reg int ans(0);
do{
a[j] == x ? ++ans : 0;
}while ((++j) < r);
if (p3 > 1048576) flush(); // 输出
uprint(ans);
pbuf[++p3] = '\n'; // 换行
}
}while (--m);
flush(); // 最后还要输出一下
return 0;
}
BDFS 没有想要的东西,所以请问一下各位大佬有没有可以把 f_inline 开开的方法。