首页 > 其他分享 >The Child and Sequence(ds,思维玄学)

The Child and Sequence(ds,思维玄学)

时间:2024-02-27 21:45:39浏览次数:23  
标签:rt Sequence int seg mm lt Child ds mod

The Child and Sequence(ds,思维玄学)

题目链接

Problem - E - Codeforces

题目描述

有一个长度为 \(n\) 的数列 \(\{a_n\}\) 和 \(m\) 次操作,操作内容如下:

  1. 格式为 1 l r,表示求 \(\sum \limits _{i=l}^{r} a_i\) 的值并输出。
  2. 格式为 2 l r x,表示对区间 \([l,r]\) 内每个数取模,模数为 \(x\)。
  3. 格式为 3 k x,表示将 \(a_k\) 修改为 \(x\)。

\(1 \le n,m \le 10^5\),\(1\le l,r,k,x \le 10^9\)。

解法

感觉这题就是很玄学,其实此题所有的难点就在于操作2,取模这个操作对于加减好像并没有好方法能够让我们快速进行。但是注意到\(k\%x<k/2\),那么对于一个数,再怎么搞,它最多被操作二进行\(log(ai)\)次,所以只需要让线段树维护区间最大值,如过\(x\)大于区间最大值,就停止,否则就下去暴力取模,毕竟每个元素最多被取模\(31\)次,那么这个做法的最大复杂度就是\(31*nlogn\)。足以通过本题。

这种思维感觉很有意思,就是发现性质后,意识到暴力必然不超过xx次,然后直接暴力做。这道题也是相同的类型。P4145 上帝造题的七分钟 2 / 花神游历各国 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码实现

#include<bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define lowbit(x) (x&(-x))
#define lson l,mid,k<<1
#define rson mid+1,r,k<<1|1
#define lt k<<1
#define rt k<<1|1
using namespace std;

typedef pair<int,int> pii;

const int N=1e5+10;
typedef pair<int,int> pii;

struct segg{
    ll s,lazy,mm;
}seg[N<<2];
void build(int l,int r,int k){
    if(l==r){cin>>seg[k].s;seg[k].mm=seg[k].s;return ;}
    int mid=l+r>>1;
    build(lson),build(rson);
    seg[k].s=seg[lt].s+seg[rt].s;
    seg[k].mm=max(seg[lt].mm,seg[rt].mm);
}
void update(int l,int r,int k,int idx,int x){
    if(l==r){
        seg[k].mm=seg[k].s=x;
        return ;
    }
    int mid=l+r>>1;
    if(idx<=mid)update(lson,idx,x);
    if(idx>mid)update(rson,idx,x);
    seg[k].s=seg[lt].s+seg[rt].s;
    seg[k].mm=max(seg[lt].mm,seg[rt].mm);
}
void update1(int l,int r,int k,int x,int y,int mod){
    if(l==r){
        seg[k].s%=mod;
        seg[k].mm=seg[k].s;return ;
    }
    int mid=l+r>>1;
    if(x<=mid)if(seg[lt].mm>=mod)update1(lson,x,y,mod);
    if(y>mid)if(seg[rt].mm>=mod)update1(rson,x,y,mod);
    seg[k].s=seg[lt].s+seg[rt].s;
    seg[k].mm=max(seg[lt].mm,seg[rt].mm);
}
ll query(int l,int r,int k,int x,int y){
    if(x<=l&&r<=y)return seg[k].s;
    ll res=0;
    int mid=l+r>>1;
    if(x<=mid)res+=query(lson,x,y);
    if(y>mid)res+=query(rson,x,y);
    return res;
}
void solve(){
    int n,m;cin>>n>>m;
    build(1,n,1);
    while(m--){
        int op;cin>>op;
        if(op==1){
            int x,y;cin>>x>>y;
            cout<<query(1,n,1,x,y)<<"\n";
        }
        else if(op==2){
            int x,y,mod;cin>>x>>y>>mod;
            update1(1,n,1,x,y,mod);
        }
        else{
            int idx,x;cin>>idx>>x;
            update(1,n,1,idx,x);
        }
    }
}
signed main(){
    std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
    srand((unsigned)time(NULL));
    //int t;std::cin>>t;while(t--)
    solve();
}

标签:rt,Sequence,int,seg,mm,lt,Child,ds,mod
From: https://www.cnblogs.com/shi5/p/18038441

相关文章

  • offline RL | HIM:基于 hindsight 的 RL 是一类大 idea
    题目:GeneralizedDecisionTransformerforOfflineHindsightInformationMatching,ICLR2022,688spotlight。其中一个8分是从5分rebuttal上来的;貌似对于其他reviewer,rebuttal也提分很多。pdf版本:https://arxiv.org/pdf/2111.10364.pdfhtml版本:https://ar5iv.lab......
  • CF168B Wizards and Minimal Spell
    传送门:luogu和codeforces。题意给定若干行长度为\(n\)的字符串,要求进行以下操作:若字符串不以#开头,则删去所有空格;若第\(i\)行和第\(i+1\)行都不以#开头,则将这两行合并为同一行;若第\(i\)行为空行,除非第\(i-1\)和\(i+1\)行都以#开头,否则删去此行。......
  • AT_abc270_g [ABC270G] Sequence in mod P 题解
    [ABC270G]SequenceinmodP博客阅读可能体验更佳题意给出递推式如下,求最小的使\(X_i=G\)成立的\(i\)。\[X_i=\begin{cases}S&i=0\\(A\timesX_{i-1}+B)\bmodp&i\ge1\end{cases}\]分析这里分几种情况来分析:当\(A=0\)时,\(X_i\)要么等于\(S\),要么等于\(B\),直......
  • [Rust] module with public and private methods
    Methods:modsausage_factory{//privatemethodfnget_secret_recipe()->String{String::from("Ginger")}//publicmethodpubfnmake_sausage(){get_secret_recipe();println!("sausage!&qu......
  • 理解华企盾DSC数据防泄密系统的加密文件黄框警示功能
    华企盾DSC数据防泄密系统为企业核心信息的保护提供了一套全面且稳健的方案。其中,其加密文件黄框警示功能是一个独特且有效的功能,它能使用户直观地了解文件的保护状态。在实际操作中,当您打开任何由华企盾DSC数据防泄密系统加密的文件时,会发现文件外边框呈现为黄色。这个黄框提示就......
  • 以传入的companyIds作为左连接主表
    <selectid="getUserDatas"resultType="com.shsajt.common.dto.UserDataWorkDTO">SELECTtemp.user_id,ifnull(tempwap.count,0)ascountfrom( <iftest="userIds!=nulla......
  • P9588 (ds思想)
    难度2还是比较巧妙的。看到这种操作题,思路基本就是考虑用合适的数据结构去求解每一个操作。在遇到一些比较难搞的操作时可以考虑转换。对于一些删除的操作一定要小心,除非很简单,否则大概率是转换看到操作一,因为这个数据范围想到只用存一个x就可以了看到操作二,是删除,等等看到操......
  • A DATETIME or TIMESTAMP value can include a trailing fractional seconds part in
    MySQL::MySQL8.0ReferenceManual::13.2.2TheDATE,DATETIME,andTIMESTAMPTypeshttps://dev.mysql.com/doc/refman/8.0/en/datetime.html13.2.2 TheDATE,DATETIME,andTIMESTAMPTypesThe DATE, DATETIME,and TIMESTAMP typesarerelated.Thisse......
  • P3939 (ds实现)
    难度2比较好的题目,加强了对主席树的理解。就我个人而言,我目前可以用三种方法切掉此题。1.平衡树对于每个颜色建平衡树,维护颜色对应的下标,询问时直接split输出size即可2.stl(vector)insert,erase,lower_bound,upper_bound,一顿搞实现上面平衡树的所有功能,就问你牛不牛3.主席......
  • .[[email protected]].mkp勒索加密数据库完美恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:.[[email protected]].mkp勒索加密数据库完美恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]有朋友oracle数据库所在机器被加密,扩展名为:.[[email protected]].mkp,数据文件类似:通......