首页 > 其他分享 >CF911G Mass Change Queries

CF911G Mass Change Queries

时间:2023-11-12 22:45:34浏览次数:34  
标签:le rs int mid ch Mass ls CF911G Change

题目描述:

给出一个数列,有q个操作,每种操作是把区间[l,r]中等于x的数改成y.输出q步操作完的数列.

数据范围:

\(1\le n\le 2\times 10^5\)
\(1\le a_i\le 100\)
\(1\le q\le 2\times 10^5,1\le l,r\le n,1\le x,y\le 100\)

思路:

观察数据范围,我们发现值域只有可怜的 \(100\)

所以一个想法就诞生了。

我们对于每个节点开 \(100\) 个懒标记,对于每个 \(tg_i\) 都表示 \(i\) 这个数最后变成什么了。

然后随便更新一下就可以了。

点击查看代码
#include<bits/stdc++.h>
#define mem(a) memset(a,0,sizeof(a))
#define set(a,b) memset(a,b,sizeof(a))
#define ls i<<1
#define rs i<<1|1
#define pb push_back
#define pt putchar
#define All(a) a.begin(),a.end()
#define T int t;cin>>t;while(t--)
#define rand RAND
using namespace std;
char buf[1<<20],*p1,*p2;
#define gc()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
template<class Typ> Typ &re(Typ &x){char ch=gc(),sgn=0; x=0;for(;ch<'0'||ch>'9';ch=gc()) sgn|=ch=='-';for(;ch>='0'&&ch<='9';ch=gc()) x=x*10+(ch^48);return sgn&&(x=-x),x;}
template<class Typ> void wt(Typ x){if(x<0) putchar('-'),x=-x;if(x>9) wt(x/10);putchar(x%10^48);}
const int inf=0x3f3f3f3f3f;
const int maxn=2e5+5;
const int mod=1e9+7;
int seed = 19243;
unsigned rand(){return seed=(seed*48271ll)%2147483647;}
int n,a[maxn];
int Q;
struct node{
    int val;
    int tg[105];
}tree[maxn<<2];
void build(int l,int r,int i){
    for(int k=1;k<=100;k++)tree[i].tg[k]=k;
    if(l==r){
        tree[i].val=a[l];
        return ;
    }
    int mid=(l+r)>>1;
    build(l,mid,ls);
    build(mid+1,r,rs);
    return ;
}
void push_down(int i){
    auto &l=tree[ls],&r=tree[rs];
    auto &u=tree[i];
    for(int k=1;k<=100;k++){
        l.tg[k]=u.tg[l.tg[k]];
        r.tg[k]=u.tg[r.tg[k]];
    }
    for(int k=1;k<=100;k++)u.tg[k]=k;
    return ;
}
void update(int l,int r,int L,int R,int x,int y,int i){
    if(L<=l&&R>=r){
        for(int k=1;k<=100;k++){
            if(tree[i].tg[k]==x){
                tree[i].tg[k]=y;
            }
        }
        return ;
    }
    int mid=(l+r)>>1;
    push_down(i);
    if(L<=mid)update(l,mid,L,R,x,y,ls);
    if(R>mid)update(mid+1,r,L,R,x,y,rs);
}
void print(int l,int r,int i){
    if(l==r){
        cout<<tree[i].tg[tree[i].val]<<" ";
        return ;
    }
    push_down(i);
    int mid=(l+r)>>1;
    print(l,mid,ls);
    print(mid+1,r,rs);
}
signed main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    cin>>Q;
    build(1,n,1);
    while(Q--){
        int l,r,x,y;
        cin>>l>>r>>x>>y;
        update(1,n,l,r,x,y,1);
    }
    print(1,n,1);
    return 0;
}

标签:le,rs,int,mid,ch,Mass,ls,CF911G,Change
From: https://www.cnblogs.com/Candycar/p/17828051.html

相关文章

  • 当devserver的changeOrigin没用,后端还用了same-origin!就这么处理
    changeOrigin:true,pathRewrite:{['^/'+process.env.VUE_APP_BASE_API]:''},headers:{//改写Origin,注意结尾不含/Origin:"http://112.28.109.249:9997",//改写RefererReferer:"http://112.28.109.249:9997/",Host:"112.28......
  • 春秋云镜 Exchange WP
    春秋云镜ExchangeWPfscan扫描(icmp)Target39.100.160.90isalive[*]Icmpalivehostslenis:139.100.160.90:80open39.100.160.90:8000open39.100.160.90:22open[*]aliveportslenis:3startvulscan[*]WebTitle:http://39.100.160.90code:200l......
  • 微信小程序checkbox的bindchange不生效的问题
    1、用了ChatGPT和文心一言,都是让我用bindchange来绑定事件。<checkbox bindchange="checkboxChange" value="false">1231312</checkbox> 但是实际我绑定了,并没有效果checkboxChange:function(e){constcheckboxValue=e.detail.value;//获取当前checkbo......
  • Git拉取失败 Your local changes would be overwritten by merge.Commit, stash or re
    今天在使用Gitpull代码的时候,出现了这样的问题:GitPullFailedYourlocalchangeswouldbeoverwrittenbymerge.Commit,stashorrevertthemtoproceed.这是因为本地有文件改动未提交,并且该文件和Git服务器最新版本有冲突,此时pull更新就会提示错误,无法更新。Git小......
  • 深入了解Flutter中的ChangeNotifier
    介绍在Flutter应用程序中,状态管理是一个关键的方面。Flutter提供了许多方法来管理应用程序的状态,其中之一是使用ChangeNotifier类。本文将深入探讨ChangeNotifier是什么,如何使用它,以及它在Flutter应用程序中的一般使用场景。1.什么是ChangeNotifier?ChangeNotifier是Flutter框架中的......
  • INotifyPropertyChanged
      可以将TextBox控件(其他控件也基本一样)与某个变量进行绑定,做出改变变量则控件也跟着改变的效果。  首先需要声明一个类,该类用来与控件绑定:usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Runtime.CompilerServices;namespaceTestWPF{......
  • 企业邮箱Exchange2013自建解决方案-方案设计
    项目背景企业现有邮局为263企业邮箱。该邮箱目前无法满足公司高速发展的需求。公司准备自建Exchange邮箱系统服务,目前人数为300人。正因为上述原因企业邮箱自建邮局解决方案建议书6及业务发展考虑,部署当前在市场上处于领导地位且性价比极高的微软Exchange2013邮件系统......
  • pt-online-schema-change的使用
    #!/bin/bashdatept-online-schema-change--alter"ADDINDEXidx_01(create_time)"D=database_name,t=table_name--charsetutf8mb4--nocheck-replication-filters--user=root--password='xxx'\--max-lag=30--execute ......
  • 采坑-阿里云 kex_exchange_identification: read: Connection reset by peer
    自己买了台阿里的测试服务器,打开终端,输入命令 sshroot@xxx 等待输入密码。**报错:kex_exchange_identification:read:Connectionresetbypeer******昨天刚用的,今天咋回事,然后试了试公司的服务器是可以的。然后就开始百度找资料,找了一圈,大部分都是让修改配置文件。但是换了......
  • Unity DOTS系列之Struct Change核心机制分析
    最近DOTS发布了正式的版本,我们来分享一下DOTS里面StructChange机制,方便大家上手学习掌握UnityDOTS开发。基于ArchType与Chunk的Entity管理机制  我们回顾以下ECS的内存管理核心机制,基于ArchType+Chunk的Entity管理模式。每个Entity不直接存放数据,数据全部存放到Component......