我觉得AVX2指令集不够爽,于是写了AVX512.到官网查了一天手册,直接拿下最优解
Solution [Ynoi2018]五彩斑斓的世界
题目大意:给定一个长度为\(n\)的序列.每次将\([l,r]\)内大于\(x\)的数减\(x\).询问\([l,r]\)内\(x\)出现了多少次
分析:还能有啥分析,直接暴力,指令集优化一下就可以了
所有函数都可以在Intel手册查到
首先,既然我们要用指令集,得\(CPU\)资瓷才行
#include <stdint.h>
#include <iostream>
#include <cpuid.h>
static void cpuid(uint32_t func, uint32_t sub, uint32_t data[4]) {
__cpuid_count(func, sub, data[0], data[1], data[2], data[3]);
}
int main() {
uint32_t data[4];
char str[48];
for(int i = 0; i < 3; ++i) {
cpuid(0x80000002 + i, 0, data);
for(int j = 0; j < 4; ++j)
reinterpret_cast<uint32_t*>(str)[i * 4 + j] = data[j];
}
std::cout << str;
}
将如上代码丢入在线\(IDE\),得到评测姬\(CPU\)型号
注意:\(Luogu\)采用集群评测,每次得到的\(CPU\)型号不一定相同.(也就是过不了多交几次的原理?)
在我这儿,得到的型号为: