AC日记——由乃与大母神原型和偶像崇拜 洛谷 P3792

由乃与大母神原型和偶像崇拜

思路:

  逆元+线段树维护和+线段树维护平方和+线段树维护最大最小值;

代码:

#include <bits/stdc++.h>

using namespace std;

#define maxn 500005
#define ll long long
#define llf ll
#define INF 0x7fffffff
#define True_Ans "damushen"
#define False_Ans "yuanxing"
#define mod (1000000009LL)
#define mod_ (833333341LL)

struct TreeNodeType {
    int l,r,mid,maxval,minval;
    ll sumval;
    llf sumval2;
};
struct TreeNodeType tree[maxn<<2];

int n,m,qmax,qmin;

ll qsum;

llf qsum2;

inline void in(int &now)
{
    char Cget=getchar();now=0;
    while(Cget>‘9‘||Cget<‘0‘) Cget=getchar();
    while(Cget>=‘0‘&&Cget<=‘9‘)
    {
        now=now*10+Cget-‘0‘;
        Cget=getchar();
    }
}

inline void in(ll &now)
{
    char Cget=getchar();now=0;
    while(Cget>‘9‘||Cget<‘0‘) Cget=getchar();
    while(Cget>=‘0‘&&Cget<=‘9‘)
    {
        now=now*10+Cget-‘0‘;
        Cget=getchar();
    }
}

void tree_build(int now,int l,int r)
{
    tree[now].l=l,tree[now].r=r;
    if(l==r)
    {
        in(tree[now].sumval),tree[now].sumval2=(tree[now].sumval*tree[now].sumval)%mod;
        tree[now].maxval=tree[now].sumval,tree[now].minval=tree[now].sumval;return;
    }
    tree[now].mid=l+r>>1,tree_build(now<<1,l,tree[now].mid),tree_build(now<<1|1,tree[now].mid+1,r);
    tree[now].sumval=tree[now<<1].sumval+tree[now<<1|1].sumval;
    tree[now].sumval2=(tree[now<<1].sumval2+tree[now<<1|1].sumval2)%mod;
    tree[now].maxval=max(tree[now<<1].maxval,tree[now<<1|1].maxval);
    tree[now].minval=min(tree[now<<1].minval,tree[now<<1|1].minval);
}

void tree_query(int now,int l,int r)
{
    if(tree[now].l>=l&&tree[now].r<=r)
    {
        qmax=max(qmax,tree[now].maxval),qmin=min(qmin,tree[now].minval);
        qsum+=tree[now].sumval,qsum2+=tree[now].sumval2;return;
    }
    if(l<=tree[now].mid) tree_query(now<<1,l,min(tree[now].mid,r));
    if(r>tree[now].mid) tree_query(now<<1|1,max(tree[now].mid+1,l),r);
}

void tree_change(int now,int to,int val_)
{
    if(tree[now].l==tree[now].r)
    {
        tree[now].sumval=val_,tree[now].maxval=val_,tree[now].minval=val_;
        tree[now].sumval2=(tree[now].sumval*tree[now].sumval)%mod;return;
    }
    if(to<=tree[now].mid) tree_change(now<<1,to,val_);
    else tree_change(now<<1|1,to,val_);
    tree[now].sumval=tree[now<<1].sumval+tree[now<<1|1].sumval;
    tree[now].sumval2=(tree[now<<1].sumval2+tree[now<<1|1].sumval2)%mod;
    tree[now].maxval=max(tree[now<<1].maxval,tree[now<<1|1].maxval);
    tree[now].minval=min(tree[now<<1].minval,tree[now<<1|1].minval);
}

llf Sum2(int r)
{
    llf R_=r;
    return (((((R_*(R_+1))%mod)*(R_*2+1))%mod)*833333341)%mod;
}

ll Sum(int l,int r)
{
    ll L_=l,s=r-l+1;
    return L_*s+s*(s-1)/2;
}

int main()
{
    in(n),in(m),tree_build(1,1,n);
    llf lfpos;ll llpos;int op,l,r;
    for(;m--;)
    {
        in(op),in(l),in(r);
        if(op==1) tree_change(1,l,r);
        else
        {
            qsum=0,qsum2=0,qmax=0,qmin=INF,tree_query(1,l,r);
            if(qmax-qmin==r-l)
            {
                if(qsum==Sum(qmin,qmax))
                {
                    if((qsum2+Sum2(qmin-1))%mod==Sum2(qmax)) puts(True_Ans);
                    else puts(False_Ans);
                }
                else puts(False_Ans);
            }
            else puts(False_Ans);
        }
    }
    return 0;
}
时间: 2024-08-03 15:29:24

AC日记——由乃与大母神原型和偶像崇拜 洛谷 P3792的相关文章

Luogu P3792 由乃与大母神原型和偶像崇拜

题意 1.修改x位置的值为y 2.查询区间 [ l , r ] 是否可以重排为值域上连续的一段(形成公差为1的等差数列)  Solution 区间问题易想到用线段树,但是直接维护序列能否形成公差为1的等差数列并不简单. 考虑哈希:1. 知道区间最大值.最小值,check : maxv - minv ?= r - l 2. 维护区间和,check : 当前区间的sum ?= 已知最大最小值的等差数列之和.但是很容易卡,如:1,3,5,7 与 1,4,4,7 3. 维护区间平方和,check : 当

AC日记——【模板】点分治(聪聪可可) 洛谷 P2634

[模板]点分治(聪聪可可) 思路: 点分治: (感谢灯神) 代码: #include <bits/stdc++.h> using namespace std; #define maxn 20005 #define INF 0x7fffffff int n,m,sum,num,cnt,ans,L,root,t; int head[maxn],vis[maxn],d[maxn]; int size[maxn],lar[maxn],flag[4]; int E[maxn<<1],V[ma

AC日记——Aragorn&#39;s Story HDU 3966

Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10510    Accepted Submission(s): 2766 Problem Description Our protagonist is the handsome human prince Aragorn comes from The Lor

热烈庆祝李宁老师荣获51CTO三周年十大男神称号,视频课程优惠劵大放送了

凡购买李宁老师优惠劵的学员,可以使用下面的优惠劵进行购买. 李宁老师的课程地址:http://edu.51cto.com/lecturer/user_id-974126.html IT圈最受喜爱的十大男神,有图有真相 http://news.51cto.com/art/201607/514139.htm 优惠劵的使用规则:只能购买优惠劵面值3倍以上的课程.如100元优惠劵,购买300元以上的课程可用. 分别提供了100.50两种面值的优惠劵各10张.在使用过程中发现某张优惠劵已经使用,可以更换其

AC日记——津津的储蓄计划 P1089 (水!)

题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津.因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中. 例如11月初津津手中还有83元,妈妈给了津津300元.津津预计11月的花销是180元

洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)

To 洛谷.1774 最接近神的人 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的遗产了.但现在的问题是如何打开这扇门…… 仔细研究后,他发现门上的图案大概是说:古代人认为只有智者才是最容易接近神明的.而最聪明的人往往通过一种仪式选拔出来.仪式大概是指,即将隐退的智者为他的候选人写下一串无序的数字,并让他们进行一种操作,即交换序列中相邻的两个元

AC自动机(附洛谷P3769模板题)

首先,介绍一下AC自动机(Aho-Corasick automaton),是一种在一个文本串中寻找每一个已给出的模式串的高效算法. 在学习AC自动机之前,你需要先学习Trie树和KMP算法,因为AC自动机正式利用并结合了两者的思想. 说到实际的不同,其实AC自动机只是在Trie树上引入了一个类似KMP中next数组的东西叫做Fail指针. 对于每一个节点,Fail指针指向该节点所代表的字符串中,次长的.在Trie树中存在的后缀(因为最长的在Trie树种存在的后缀就是其本身)所代表的节点. 举例:

洛谷 P1230 智力大冲浪

我的第一篇题解(辣鸡题解)洛谷 P1230 智力大冲浪 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: 首先,比赛时间分为n个时段(n≤500),它又给出了很多小游戏,每个小游戏都必须在规定期限ti前完成(1≤ti≤n).如果一个游戏没能在规定期限前完成,则要从奖励费m元中扣去一部分钱wi,wi为自然数,不同的游戏扣去的钱是不一样的.当然,每个游

洛谷P3348 [ZJOI2016]大森林(LCT,虚点,树上差分)

洛谷题目传送门 思路分析 最简单粗暴的想法,肯定是大力LCT,每个树都来一遍link之类的操作啦(T飞就不说了) 考虑如何优化算法.如果没有1操作,肯定每个树都长一样.有了1操作,就来仔细分析一下对不同树的影响. 假设有一个2操作形如\(l\ r\ x\),那么从微观来看差异,我们只关注第l-1棵树和第l棵树.再假设以后都没有了1操作,那么我们可以认为,第l棵树是第l-1棵树把这个1操作以后嫁接在原来生长节点上的所有节点(以及所有子树)全部转而嫁接到x上.再看第r棵树和第r+1棵树,是不是可以认