首页 > 其他分享 >Tricks

Tricks

时间:2024-11-29 20:12:44浏览次数:3  
标签:int text Tricks kS -- bitset op

记录做题时的一些有趣 Tricks

\(\text{Prob.1}\) P3674 小清新人渣的本愿

奇奇妙妙角色关系图

算法:

莫队、\(\text{bitset}\)

思路

令 \(S=10^5\)

考虑使用 \(\text{bitset}\) 来 \(O(1)\) 维护当前区间出现的数

令 \(u,v\) 两个 \(\text{bitset}\) 分别维护 \(x,S-x\) 是否在区间中存在

第一个询问本质上是求区间中是否存在两个数 \(a,a+x\),那么可以将 \(u\) 左移 \(x\) 位再和 \(u\) 按位与,如果结果存在 \(1\),那么答案为真

第二个询问本质上是求区间中是否存在两个数 \(a,x-a\),考虑将 \(v\) 右移 \(S-x\) 位,此时这个 \(\text{bitset}\) 的第 \(i\) 位维护的是 \(x-i\) 是否存在,和 \(u\) 按位与即可

第三个询问,由于 \(x \le S\),可以暴力枚举 \(x\) 的因数,在 \(u\) 中判断是否存在即可

时间复杂度:\(O(n\sqrt{n}+\frac{n^2}{w})\)

Code

// BLuemoon_
#include <bits/stdc++.h>

using namespace std;

const int kMaxN = 1e5 + 5, kS = 1e5;

int n, m, a[kMaxN], op, l, r, x, B, c[kMaxN], cnt, L = 1, R;
bitset<kMaxN> u, v, ret;

struct Q {
  int id, op, l, r, x;
  bool operator<(const Q &o) const {
    return (l / B) != (o.l / B) ? (l / B) < (o.l / B) : (((l / B) & 1) ? r < o.r : r > o.r);
  }
} q[kMaxN];

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m, B = sqrt(n);
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (int i = 1; i <= m; i++) {
    cin >> q[i].op >> q[i].l >> q[i].r >> q[i].x, q[i].id = i;
  }
  sort(q + 1, q + m + 1);
  for (int i = 1; i <= m; i++) {
    for (; R < q[i].r; c[a[++R]]++, c[a[R]] == 1 && (u.set(a[R]), v.set(kS - a[R]), 0)) {
    }
    for (; L > q[i].l; c[a[--L]]++, c[a[L]] == 1 && (u.set(a[L]), v.set(kS - a[L]), 0)) {
    }
    for (; R > q[i].r; c[a[R]]--, c[a[R]] == 0 && (u.reset(a[R]), v.reset(kS - a[R]), 0), R--) {
    }
    for (; L < q[i].l; c[a[L]]--, c[a[L]] == 0 && (u.reset(a[L]), v.reset(kS - a[L]), 0), L++) {
    }
    if (q[i].op == 1) {
      ret[q[i].id] = (u & (u << q[i].x)).any();
    } else if (q[i].op == 2) {
      ret[q[i].id] = (u & (v >> (kS - q[i].x))).any();
    } else {
      for (int p = 1; p * p <= q[i].x; p++) {
        if (q[i].x % p == 0 && u[p] && u[q[i].x / p]) {
          ret[q[i].id] = 1;
          break;
        }
      }
    }
  }
  for (int i = 1; i <= m; i++) {
    cout << (ret[i] ? "hana" : "bi") << '\n';
  }
  return 0;
}

\(\text{Prob.2}\) ABC221G - Jumping sequence

算法

曼哈顿距离转切比雪夫距离,\(\text{bitset}\) 优化可行性 dp

思路

考虑将坐标系旋转 \(\frac{\pi}{4}\) 并拉长 \(\sqrt{2}\) 倍

标签:int,text,Tricks,kS,--,bitset,op
From: https://www.cnblogs.com/bluemoon-blog/p/18577416

相关文章

  • [笔记]Important Tricks And Lemmas
    图论对于图路径的构造,常常思考是否可以对叶子节点进行某种配对。按照dfs序对节点进行配对是考虑的方向之一。例题P7320「PMOI-4」可怜的团主,P4665[BalticOI2015]。树上路径的交是路径。路径满足边数等于点数\(-1\),通常可以做某些神秘容斥。例题:2024省选集训Day8B......
  • Tricks
    感谢huangkx的trick转载。用可持久化线段树维护非递归线段树的树链信息可以高效地解决区间半群问题。线段树维护的序列长度要保持不变。关于\(d\)(约数个数函数):\(d(nm)=\sum_{x\midn}\sum_{y\midm}[\gcd(x,y)=1]\);由此可以推导出当\(m\)为......
  • 10条提升大模型任务微调效果的tricks
    在大型语言模型(LLMs)的研究和应用中,如何通过微调来适应特定任务是一个关键问题。尽管提示工程(PE)在提升LLMs的零样本学习和上下文内学习方面取得了显著成效,但关于如何设计有效的微调样本以进一步提升LLMs性能的研究还相对欠缺。为解决上述问题,提出了样本设计工程SDE(SampleDe......
  • Tricks
    MaximumValue\(a_i-\left[\dfrac{a_i}{a_j}\right]a_j=a_i\bmoda_j\)枚举\(k=\left[\dfrac{a_i}{a_j}\right],b=a_j.\)余数比除数小。\(b>a-kb>0\iff(k+1)b>a\geqkb.\)那么\(a\)就是\(\le(k+1)b\)的最大数。二分就好。程式#include<b......
  • Tricks
    字符串计算一个字符串\(S\)的border的时间复杂度是\(O(|S|)\)的,且与模板串无关。在更换模板串时,不需要重新计算border。对于两个字符串集合,两两匹配的时间复杂度从\(m\sum|S|+n\sum|T|\),降低到了\(\sum|S|+n\sum|T|\)。(2.16A60pts)动态规划有些题目可以......
  • [Some Tricks] 自动取模类
    consti128o=1;template<i64mod,i64invpow=mod-2>structModular{u64M=(o<<64)/mod;i64query(i64x){u64x_=1ull*x;u64q=1ull*(((i128)(M)*(i128)(x_))>>64);u64r=x_-q*(1ull*mod......
  • tricks I
    1.P2824排序碰见这种只有最后有一个查询的问题我们可以考虑二分最后的答案。具体地,对于当前\(mid\),把所有小于\(mid\)的设为\(0\),其他的设为\(1\)。此时我们只需要维护最后的位置是否大于\(mid\)就好。那么每次升降序的排序就很好办了。我们用线段树维护一个区间和,也......
  • Essay - OI tricks
    ......
  • CV常用Tricks
    训练CV比赛常用Tips&Tricks目录引言1.图像增强颜色增强RGBNormBlackandWhiteBenGraham:Grayscale+GaussianBlurHue,Saturation,BrightnessLUVColorSpaceAlphaChannelYZColorSpaceLumaChromaCIELabYUVColorSpaceCenterCropFlippingsRandom......
  • 洛谷 P8955 「VUSC」Card Tricks
    洛谷传送门很显然每个数的每一位最多只会修改一遍。于是拆位,每一位开个并查集,存下一个不拥有这一位的数,就可以暴力修改了。但是空间是\(O(n\logV)\)的,炸了。于是可以考虑手写i24类,同时并查集寻找祖先不要用递归版的路径压缩,然后就过了。code//Problem:P8955「VUSC」......