[bzoj3787]Gty的文艺妹子序列

TabNet vs XGBoost/LightGBM:在真实数据集上的超参数调优与性能对比保姆级指南 本文深入对比了TabNet与XGBoost/LightGBM在表格数据建模中的性能差异,从超参数调优到工业级部署提供全景指南。通过Forest Cover Type数据集实验,详细解析了TabNet的注意力机制和可解释性优势,以及GBDT在资源效率和推理速度上的表现,为技术选型提供实用建议。 阅读详情

题目大意

在线兹瓷修改操作与区间求逆序对。
所有元素大小在[1,n]

很显然的离线做法

我们回忆bzoj3289的做法,可以使用莫队算法,加上线段树进行兹瓷in,out,query。

在线做法?

我们回忆经典分块做法。
预处理ans[i,j]表示第i块到第j块的答案,sum[i,j]表示前i块元素j的个数,然后只需要再弄个树状数组就可以搞了。
现在我们要兹瓷修改,那我们照着原来的思路改一下。
ans[i,j]表示在第i块取一个元素并在第j块取一个元素组成的逆序对个数。
那么每次修改操作会涉及到根号个值发生改变,询问操作时需要对第二维进行区间查询。因此第二维用树状数组维护。
sum[i,j]表示前i块元素j的个数,那么修改操作也只会改变根号个值,询问操作需要对第二维进行区间查询,因此第二维用树状数组维护。
num[i]表示第i块内逆序对个数,修改操作暴力重算。
因此就可以了。

温馨提示:用线段树会TLE的很惨哦!

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<ctime>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fd(i,a,b) for(i=a;i>=b;i--)
using namespace std;
const int maxn=50000+10,maxc=250+10;
int ans[maxc][maxc],num[maxc];
int sum[maxc][maxn],tree[maxn];
int belong[maxn],a[maxn],sta[maxn];
int i,j,k,l,r,s,t,n,m,now,top,c;
bool czy;
int lowbit(int x){
    return x&-x;
}
void change(int k,int t){
    while(k<=n){  
        tree[k]+=t;  
        k+=lowbit(k);  
    }  
}
int query(int k){
    int t=0;  
    while (k){  
        t+=tree[k];  
        k-=lowbit(k);  
    }  
    return t;  
}
void change2(int id,int k,int t){
    while(k<=belong[n]){  
        ans[id][k]+=t;  
        k+=lowbit(k);  
    }  
}
int query2(int id,int k){
    int t=0;  
    while (k){  
        t+=ans[id][k];  
        k-=lowbit(k);  
    }  
    return t;  
}
void change3(int id,int k,int t){
    while(k<=n){  
        sum[id][k]+=t;  
        k+=lowbit(k);  
    }  
}
int query3(int id,int k){
    int t=0;  
    while (k){  
        t+=sum[id][k];  
        k-=lowbit(k);  
    }  
    return t;  
}
int read(){
    int x=0;
    char ch=getchar();
    while (ch<'0'||ch>'9') ch=getchar();
    while (ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x;
}
void write(int x){
    while (x){
        sta[++top]=x%10;
        x/=10;
    }
    while (top){
        putchar(sta[top]+'0');
        top--;
    }
    putchar('\n');
}
int main(){
    //freopen("data6.in","r",stdin);freopen("3787.out","w",stdout);
    czy=1;
    n=read();
    c=floor(sqrt(n));
    fo(i,1,n) a[i]=read(),belong[i]=(i-1)/c+1;
    fo(i,1,belong[n]-1){
        fo(j,(i-1)*c+1,i*c) change(a[j],1);
        fo(j,i+1,belong[n]){
            t=0;
            fo(k,(j-1)*c+1,min(j*c,n)) t+=query(n)-query(a[k]);
            change2(i,j,t);
        }
        fo(j,(i-1)*c+1,i*c) change(a[j],-1);
    }
    fo(i,1,belong[n])
        fo(j,1,min(i*c,n)) change3(i,a[j],1);
    fo(i,1,belong[n]){
        fo(j,(i-1)*c+1,min(n,i*c)){
            num[i]+=query(n)-query(a[j]);
            change(a[j],1);
        }
        fo(j,(i-1)*c+1,min(n,i*c)) change(a[j],-1);
    }
    m=read();
    while (m--){
        t=read();
        if (t==0){
            j=read();k=read();
            if (czy) j^=now,k^=now;
            now=0;
            l=belong[j];r=belong[k];
            if (r-l<=1){
                fo(i,j,k){
                    now+=query(n)-query(a[i]);
                    change(a[i],1);
                }
                fo(i,j,k) change(a[i],-1);
                //write(now);
                printf("%d\n",now);
                continue;
            }
            fo(i,l+1,r-1){
                now+=num[i];
                now+=query2(i,r-1)-query2(i,i);
            }
            fo(i,j,l*c){
                now+=query(n)-query(a[i]);
                now+=query3(r-1,a[i]-1)-query3(l,a[i]-1);
                change(a[i],1);
            }
            fo(i,(r-1)*c+1,k){
                now+=query(n)-query(a[i]);
                now+=query3(r-1,n)-query3(r-1,a[i])-query3(l,n)+query3(l,a[i]);
                change(a[i],1);
            }
            fo(i,j,l*c) change(a[i],-1);
            fo(i,(r-1)*c+1,k) change(a[i],-1);
            //write(now);
            printf("%d\n",now);
        }
        else{
            j=read();k=read();
            if (czy) j^=now,k^=now;
            fo(i,belong[j]+1,belong[n]){
                t=query3(i,k-1)-query3(i-1,k-1);
                t-=query3(i,a[j]-1)-query3(i-1,a[j]-1);
                change2(belong[j],i,t);
            }
            fo(i,1,belong[j]-1){
                t=query3(i,n)-query3(i,k)-query3(i-1,n)+query3(i-1,k);
                t-=query3(i,n)-query3(i,a[j])-query3(i-1,n)+query3(i-1,a[j]);
                change2(i,belong[j],t);
            }
            fo(i,belong[j],belong[n]){
                change3(i,a[j],-1);
                change3(i,k,1);
            }
            a[j]=k;
            num[belong[j]]=0;
            fo(i,(belong[j]-1)*c+1,min(belong[j]*c,n)){
                num[belong[j]]+=query(n)-query(a[i]);
                change(a[i],1);
            }
            fo(i,(belong[j]-1)*c+1,min(belong[j]*c,n)) change(a[i],-1);
        }
    }
    //printf("\n%d\n",clock());
}
K210学习笔记(八)——人脸检测和人脸识别 前言 人脸检测是人脸识别算法的第一步,人脸识别过程主要分为人脸图像获取、人脸检测、人脸配准、人脸表征以及人脸图像匹配与识别。人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸外接矩形(椭圆)在图像中的坐标,可能还包括姿态如倾斜角度等信息。人脸检测在安防监控,人证比对,人机交互,社交和娱乐等方面有很强的应用价值。 人脸识别是在人脸检测的基础上除了检测到人脸的位置以外, 还可以识别到这个人是谁,利用分析比较是基于人的脸视觉部特征信息进行身份鉴识别的计算机一种生物识别技术。 一、KPU模块方法 1、 阅读详情

相关推荐

BCC Python开发教程&常用BCC工具(一)

这个教程主要目的是展示如何使用python来进行bcc工具开发和编程。教程主要分为两个部分:可观察性和网络。文中的代码片段均都来自于bcc:代码片段的licenses见bcc中具体文件。也可参考bcc开发者手册以及end-users工具教程:。此外bcc还开放有lua接口。

hudongliang2006nb的专栏 2084

BZOJ 3787: Gty的文艺妹子序列

自闭了很久,代码看了一遍又一遍,终于把过程想清楚了 其实还是太着急了,过程都没有想完整 分块做 $g[i][j] 表示 第j块对第i块的逆序对个数,i <= j$ 第一位暴力,第二位树状数组维护 $smaller[i][j] 表示前i块中j的个数,第二维树状数组维护$ $这样我们就可以以log的时间求出前i块中 任意区间范围的数的个数$ $考虑把查询分成A...

banshen0201的博客 196

使用 Python 和可视化编程控制树莓派机械臂myCobot

这些模块包括逻辑、循环、数学、文本、列表、颜色、变量、函数以及控制机械臂的函数等等,所以用户可以轻松入门编程,只需单击右上角的运行就可以启动程序,做一些有趣的应用。可以搭配任意摄像头进行图像识别,具有4个 USB 端口,可以通过 Raspberry Pi 的微型 HDMI 端口连接到显示器. 最后,40 个GPIO 接头可以进行更多扩展应用,机械臂每个接口都有清晰的标记,面板上还有一个电源开关和一个直流电源插孔。您现在可以将机器人放在地板或桌子上,并用力拧紧吸盘,以确保机械臂的底座在操作过程中不会移动。

m0_62456998的博客 3965

P4867 Gty的二逼妹子序列(莫队+值域分块)

P4867 Gty的二逼妹子序列(莫队+值域分块)

汤键的博客 359

从晶体管到触发器:为什么芯片设计必须区分同步/异步复位?

本文深入探讨了芯片设计中同步复位与异步复位的物理本质与工程权衡。从晶体管级的CMOS结构出发,剖析了两种复位方式在物理实现、时序可靠性(如建立/保持时间、恢复/移除时间)上的根本差异,并分析了在不同应用场景下的选择策略。文章强调,理解复位信号的底层机制对于确保芯片时序收敛、系统上电确定性及整体鲁棒性至关重要。

time3的博客 221

VECTOR硬件VN1600系列对比:VN1610、VN1611、VN1630A、VN1640A、VN1630log、VN1670

VN16系列说不清道不明的区别和关系

AmorRun的博客 2万+

BZOJ 3787 Gty的文艺妹子序列 分块+树状数组

题目大意:带修改、强制在线的区间逆序对 将之前3744TLE了的某个做法重写了一发 把其中一些预处理改成了树状数组 不得不说树状数组常数还是小啊 令g[i][j](i equals[i][j]表示前i块之内j的数量 这个直接暴力即可 smaller[i][j]表示前i块之内小于等于j的数的数量 第一维暴力第二维树状数组 修改时都维护一遍 查询时 首先我们把区间分为三块 令A为左侧零碎部

世界 2685

T265摄像头插着开机后,需要重新插拔才能正常启动

T265摄像头插着开机后,需要重新插拔才能正常启动

qq_35598561的博客 1076

bzoj 3787: Gty的文艺妹子序列 分块+树状数组

题意给出n个数,要求资瓷单点修改和区间逆序对,强制在线。 n,m<=50000分析这题好劲啊!!!看到题就想起了bzoj 3744,只不过那一题没有单点修改。 bzoj 3744的做法是预处理ans[i,j]表示第i块到点j的逆序对数,sum[i,j]表示不大于i的数在前j块里面出现的次数。 但这题很明显不能这么干,因为维护ans和sum的复杂度太大。 那么我们考虑转换一下,设ans[i,j

beginend 600

Python爬虫教程:抓取区块链交易信息及加密货币市场数据

随着区块链技术和加密货币的迅猛发展,区块链交易和加密货币市场的数据逐渐成为金融、技术、经济研究等领域的热点。对于开发者和研究者而言,实时获取区块链交易数据和加密货币市场行情,对于投资分析、市场预测、技术研究等具有重要的参考价值。本文将通过Python爬虫技术,介绍如何抓取区块链交易信息及加密货币市场数据,详细阐述数据获取的原理、技术方案、实现方法以及抓取到的数据的存储与分析。我们将依托最新的爬虫技术,如requestsSeleniumScrapy,以及相关的数据处理库(如pandasmatplotlib。

2201_76125261的博客 2776

Python爬虫反爬:突破Cloudflare 5秒盾(免费方案,小红书/知乎可用)

这套方案的核心优势是“真实模拟+免费无门槛”无需付费代理、无需复杂JS解密,仅用playwright模拟真实浏览器,即可突破Cloudflare 5秒盾;适配小红书、知乎、豆瓣等主流平台,修改配置即可复用;兼顾易用性和稳定性,新手也能快速上手,企业级场景可通过IP轮换、异步爬取进一步优化。“模拟人类行为到底”——Cloudflare的反爬本质是区分“机器”和“人类”,只要爬虫的浏览器指纹、行为特征与人类一致,就能稳定绕过限制。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2880

【分块+BIT】BZOJ3787 Gty的文艺妹子序列

【题目】 BZOJ 正整数序列AAA,支持单点修改,区间逆序对数,所有数字不超过5×1045\times 10^45×104。强制在线。 【解题思路】 毒瘤数据结构题不妨考虑分块,设分块大小为SSS。 维护sumi,jsum_{i,j}sumi,j​表示前iii块中元素jjj的个数,每次修改只会影响O(S)O(S)O(S)个值,同样用树状数组维护可以做到O(Slog⁡n)O(S\log n)O(S...

MEET YOU FIRST TIME 239

uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级详细教程

uniapp中H5微信登录,uniapp H5微信授权登录,微信公众号第三方网页(H5)授权登录(OAuth2.0)流程及逻辑详细教程,UNIAPP 开发H5 怎么实现微信公众号登录功能,uniapp如何实现H5网页的公众号微信登录,怎么做uniapp微信登录,uniapp h5项目怎么实现微信登录的功能,uniapp微信浏览器H5授权微信登录,UniApp开发H5接入微信登录的全过程,uniapp的H5页面使用微信登录,uniapp H5微信授权登录,H5之微信授权登陆 (uniapp网页版微信授权登录)

🏆 前端领域优质创作者 7403

BZOJ3787:Gty的文艺妹子序列(分块,树状数组)

Description Autumn终于会求区间逆序对了!Bakser神犇决定再考验一下他,他说道: “在Gty的妹子序列里,某个妹子的美丽度可也是会变化的呢。你还能求出某个区间中妹子们美丽度的逆序对数吗?当然,为了方便,这次我们规定妹子们的美丽度在[1,n]中。仍然强制在线。” Autumn需要你的帮助。 给定一个正整数序列a(1<=ai<=n),支持单点修改,对于每次询...

weixin_34337265的博客 137

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

BZOJ3787 : Gty的文艺妹子序列

将序列分成$\sqrt{n}$块,预处理出每两块之间的逆序对数,以及ap[i]表示前i块内数字出现次数的树状数组 预处理:$O(n\sqrt{n}\log n)$ 修改时,ap[i]可以在$O(\sqrt{n}\log n)$复杂度内完成修改,然后考虑修改的位置对答案的贡献,可以发现相当于某一行、某一列都加上一个数,对于行列各开$\sqrt{n}$棵树状数组差分维护 修改:$O(\sqrt{...

weixin_30726161的博客 75

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

bzoj 3787: Gty的文艺妹子序列

(gty妹子好多啊。。) 这个题整整调了快一天,真是累死了。。(这么神的题当然是在看某神犇博客的时候看到有这种做法,然后正好就做了233) 其实就是块套树状数组,需要维护成吨的信息,,,, 块与块之间的逆序对数,然后把每个块 i 到最后一个块 j 的逆序对和再搞到树状数组里,然后再来一个树状数组维护处到底 i 个块的时候,有多少个比 j 小的数,其实就是普通的数值插入就好了。(查询的话,块内...

weixin_30794491的博客 157

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

BZOJ3787 gty的文艺妹子序列 【树状数组】【分块】

题目分析: 首先这种乱七八糟的题目就分块。然后考虑逆序对的统计。 一是块内的,二是块之间的,三是一个块内一个块外,四是都在块外。 令分块大小为$S$。 块内的容易维护,单次维护时间是$O(S)$。 块之间的有两种维护方法,一种是在块内维持有序,那么修改的时候进行一次插排,查询的时候枚举每一块,然后二分查找;另一种是利用下面所述的另一个数组来做块内统计。第一种方法的时间是$O(S+\fra...

weixin_30951389的博客 178

【分块】【树状数组】bzoj3787 Gty的文艺妹子序列

题解懒得自己写了,Orz一发wangxz神犇的: http://bakser.gitcafe.com/2014/12/04/bzoj3787-Gty%E7%9A%84%E6%96%87%E8%89%BA%E5%A6%B9%E5%AD%90%E5%BA%8F%E5%88%97-%E5%AE%98%E6%96%B9%E9%A2%98%E8%A7%A3/ 1 #include<cstd...

weixin_34178244的博客 117

BZOJ 3787 Gty的文艺妹子序列(分块+树状数组+前缀和)

题意 给出n个数,要求支持单点修改和区间逆序对,强制在线。 n,m<=50000 题解 和不带修改差不多,预处理出smaller[i][j]代表前i块小于j的数的数量,但不能用f[i][j]代表第i块到第j块逆序对的数量,这样不好维护。 我们用f[i][j]代表从第i块选出一个元素与从第j块选出一个元素组成逆序对的数量,维护时最多修改根号n个f数组,查询时用前缀和起到与不带...

Aaronliu17008的博客 235

BZOJ 3787: Gty的文艺妹子序列 [分块 树状数组!]

传送门 题意:单点修改,询问区间内逆序对数,强制在线 看到加了!就说明花了不少时间.... 如果和上题一样预处理信息,用$f[i][j]$表示块i到j的逆序对数 强行修改的话,每个修改最多会修改$(\frac{N}{S})^2$个信息,可以通过$S=N^{\frac{2}{3}}$达到$O(N^{\frac{5}{3}})$ 但是我们可以更快 令$S=\sqrt{N}$ 如果我们...

weixin_30439067的博客 104

[bzoj3744]Gty的妹子序列

题目大意在线兹瓷区间求逆序对个数。双倍经验最简单的做法是预处理ans和sum这个不用说了具体可以看根号算法题库里的经典分块思路。 当然这道题有升级版Gty的文艺妹子序列,那道题多一个修改操作。 反正我直接改了一下那题的代码交了。#include<cstdio> #include<algorithm> #include<cmath> #include<ctime> #define fo(i,a,b

不来也不去的一只失忆蝴蝶 1079

bzoj3809 Gty的二逼妹子序列

http://www.elijahqi.win/2018/03/01/bzoj3809/ Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题。 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数。 为了方便,我们规定妹子们的美丽度全都在[1,n]中。 给定一个长度为n(1&lt;=n&lt;=100000)的正...

Elijahqi 310
上一篇: [bzoj3809]Gty的二逼妹子序列
下一篇: [NOIP2013]积木大赛
WerKeyTom_FTD
博客等级 码龄11年 357粉丝 831原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值