首页 > 其他分享 >回忆旅途的过往

回忆旅途的过往

时间:2023-10-18 22:24:30浏览次数:43  
标签:10 le val tr 砝码 过往 旅途 回忆

回忆旅途的过往

目录

题大意

有 \(n\) 个砝码,每个砝码都有初始重量 \(a_i\) 。 \(Q\) 次操作,每次操作有以下两种

  • \(1,l,r,x\):表示把 \(l\) 到 \(r\) 的所有 \(a_i\) 变成 \(x\)
  • \(2 , l , r , x\) :查询 \([l, r]\) 的所有砝码,每个砝码可以使用无限次,是否能称出重量 \(x\)

\(a_i , x \le m\)

保证 \(a_i , x\) 种数不超过 \(10\)

\(n , Q \le 10^6 , m \le 10^5\)

思路

因为 \(a_i , x\) 的种数不超过 $10 $ , \(m\le 10^5\)

所以考虑 $O(2^{10} * m) $ 把所有情况的答案都预处理出来

然后用一棵线段树维护区间有什么数。

用二进制实现

code

#include <bits/stdc++.h>
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
#define lp p << 1
#define rp p << 1 | 1
using namespace std;
const int N = 1e6 + 5 , M = 1e5 + 5;
int n , m , Q , vis[N] , tot , cnt , a[N];
bitset<N> ans[2000];
struct Tr {     
    int val , lzy;
} tr[N << 2];
void pushdown (int p) {
    if (!tr[p].lzy) return;
    tr[lp].lzy = tr[rp].lzy = tr[p].lzy;
    tr[lp].val = tr[rp].val = tr[p].lzy;
    tr[p].lzy = 0;
} 
void change (int p , int l , int r , int L , int R , int x) {
    if (L <= l && R >= r)
        tr[p].val = tr[p].lzy = 1 << (x - 1);
    else {
        pushdown (p);
        int mid = l + r >> 1;
        if (L <= mid) change (lp , l , mid , L , R , x);
        if (mid < R) change (rp , mid + 1 , r , L , R , x);
        tr[p].val = tr[lp].val | tr[rp].val;
    }
}
int query (int p , int l , int r , int L , int R) {
    if (L <= l && R >= r) 
        return tr[p].val;
    else {
        pushdown (p);
        int mid = l + r >> 1 , ans1 = 0;
        if (L <= mid) ans1 = query (lp , l , mid , L , R);
        if (mid < R) ans1 |= query (rp , mid + 1 , r , L , R);
        return ans1;
    }
}
void add (int x) {
    if (vis[x]) return;
    vis[x] = ++tot;
    fu (i , (1 << (tot - 1)) , (1 << tot) - 1) {
        ans[i] = ans[i - (1 << (tot - 1))];
        fu (j , x , m) {
            ans[i][j] = ans[i][j] | ans[i][j - x];
        }
    }
}
int main () {
    int t , opt , l , r , x;
    ans[0][0] = 1;
    scanf ("%d%d%d" , &n , &m , &Q);
    fu (i , 1 , n) scanf ("%d" , &a[i]) , add (a[i]);
    fu (i , 1 , n) 
        change (1 , 1 , n , i , i , vis[a[i]]);
    int ans1 = 0;
    while (Q --) {
        scanf ("%d%d%d%d" , &opt , &l , &r , &x);
        if (opt == 1) {
            ans1 ++;
            if (ans1 == 3)
                ans1 --;
            if (!vis[x]) add (x);
            change (1 , 1 , n , l , r , vis[x]);
        }
        else {
            ans1 ++;
            if (ans1 == 2)
                ans1 --;
            t = query (1 , 1 , n , l , r);
            puts (ans[t].test (x) ? "Yes" : "No");
        }
    }
    return 0;
}

标签:10,le,val,tr,砝码,过往,旅途,回忆
From: https://www.cnblogs.com/2020fengziyang/p/17773494.html

相关文章

  • 一个突然的回忆
    突然记起来,初二的时候有一个人跟我说:“我的电脑里面同时装了火绒和360。然后它们两个互相说对面是病毒软件。”另一个人:“你这有啥,我记得之前有一次,360自己报自己是病毒软件,弹出来是否卸载,然后我点确认卸载,真就自己把自己给删了。”今天,Greenturtle跟我说:“笑死我了,我家的电脑也......
  • ner的回忆与暂别
    最近在做一些ner方面的工作,想到了一些小细节,这里回顾记录一下自己之前工作中用到的一些小技巧,主要是通过数据增强和训练策略做一些小提升。后面估计主要工作研究点放大模型和知识图谱了,记录一下原始的数据集的采集:很多项目没有数据集,那么就需要我们去找一些数据集,数据集的一些......
  • 捕捉回忆的时光机:用AI智能管理的NAS,提升整理效率
    记忆会模糊,但照片不会,每次打开照片的时候背后的故事就会浮现在我们眼前。当然,我们现在的设备也越来越多了,当我们要找某一张照片时总是需要从散落在各个设备里的照片库寻找,花费大量时间。而TerraPhotos的出现,无论是很多年前的照片,奔赴世界各地的打卡记录,每个陪我们走过一段时间的......
  • 80、90童年回忆之小霸王游戏机网页版
    前言在如今快节奏的生活中,我们常常追逐着最新潮流,迷失了曾经的经典与回忆。现在,有一种游戏机能够带你回到小时候,让你重温那些令人难以忘怀的游戏时光,这就是小霸王游戏机!作为80年代和90年代最受欢迎的游戏机之一,它陪伴了整整一代人的成长。本文介绍小霸王游戏机网页版架设......
  • OI回忆录
    前言2023.09.14:转眼间已经快大三开学了,突然翻到了这篇写的半半拉拉的回忆录。快速地扫了一遍后,发现这里面写的很多细节现在已经不记得了……为了防止记忆再一次退化把那些片段全部抹去,我决定还是把剩下的一部分补完。如果有人愿意看的话,我甚至还可以再补个爽文大结局(现在的我确实......
  • 《UNIX 传奇:历史与回忆》读后感
    《UNIX传奇:历史与回忆》是bwk(BrianW.Kernighan)2019年的新作,回忆了UNIX在大半个世纪的风雨历程,是一本引人入胜的书籍。通过对UNIX操作系统的历史和发展进行详细的叙述和回顾,让我对这个操作系统有了更深入的了解。读完这本书,我不仅对UNIX的技术细节有了更清晰的认识,也对......
  • 爬虫 | 童年回忆宝可梦数据抓取
    本文将带你认识一个爬取重点解析库lxml,该库属于爬虫“必考”知识点之一,介绍lxml的同时会给你介绍两种解析语法,一种深度结合前端知识进行操作,一种语法简洁,处理速度快。以上两部分内容分别为cssselect与XPath。知识点lxml库与cssselect库XPath语法初识lxml库与c......
  • 「回忆录」随想
    炎炎七月,又来到了三区大机房。去年这个时候,机房里有很多的同学,有学长,那时机房也坐得满满的,如今显得有些落寞和凄凉了。现在的我,可以说已经成功从去年失败的阴影中走出来了,心态变好了,似乎事情也变顺了,在经历了大半个学期的赶课,文化课已经废到一定地步了,但是,不管怎么着,今年一定要......
  • OI回忆录
    本来吧,像我这种水平的选手退役,是没有资格写游记的。但是奈何感慨颇多,只得愤愤写下。小时候就对计算机编程之类的东西感兴趣,家里却也就报了点兴趣班,基本都是小一群孩子在玩。小时候成绩是不好的,也可以说是比较差的,家里自然没有考虑让我学习OI或者MO,当然他们也不知道这些东西。到了......
  • OI 生涯回忆录
    如果想要了解更多无关信息,clickhere.Part.0前言虽然名为回忆录,但其实在我正式\(\mathtt{AFO}\)之前就已经动笔了。大致记录一下我这开始没多久就结束了的\(\mathtt{OI}\)生涯。中间可能会穿插一些无关的事(笑)。大概按照时间顺序,可能以前的有点记不清了。主要记录......