预祝2025省选嗨翻天

预祝2025省选嗨翻天

\(T1\) A. 单峰序列 \(8pts\)

  • 部分分

    • \(8pts\) :枚举每个数在单峰序列的左边还是右边,求次数做法同 luogu P3531 [POI 2012] LIT-Letters 。
    点击查看代码
    int a[500010],b[500010],c[500010],ans[500010],id;
    vector<int>l,r;
    struct BIT
    {int c[500010];int lowbit(int x){return (x&(-x));}void add(int n,int x,int val){for(int i=x;i<=n;i+=lowbit(i))  c[i]+=val;}int getsum(int x){int ans=0;for(int i=x;i>=1;i-=lowbit(i))  ans+=c[i];return ans;}
    }T;
    void dfs(int pos,int n)
    {if(pos==n+1){b[0]=0;for(int i=0;i<l.size();i++){b[0]++;  b[b[0]]=l[i];}sort(b+1,b+1+b[0]);b[0]++;  b[b[0]]=a[id];int tmp=b[0]+1;for(int i=0;i<r.size();i++){b[0]++;  b[b[0]]=r[i];}sort(b+tmp,b+1+b[0],greater<int>());for(int i=1;i<=n;i++)  c[b[i]]=i;for(int i=1;i<=n;i++)  tmp=0;for(int i=n;i>=1;i--){tmp+=T.getsum(c[a[i]]-1);  T.add(n,c[a[i]],1);}ans[n]=min(ans[n],tmp);for(int i=1;i<=n;i++)  T.add(n,c[a[i]],-1);}else{if(pos==id)  dfs(pos+1,n);else{l.push_back(a[pos]);  dfs(pos+1,n);  l.pop_back();r.push_back(a[pos]);  dfs(pos+1,n);  r.pop_back();}}
    }
    int main()
    {
    #define Isaac
    #ifdef Isaacfreopen("seq.in","r",stdin);freopen("seq.out","w",stdout);
    #endifint n,t,i;cin>>n>>t;memset(ans,0x3f,sizeof(ans));for(i=1;i<=n;i++){cin>>a[i];if(a[i]>a[id])  id=i;dfs(1,i);}if(t==1)  for(i=1;i<=n;i++)  cout<<ans[i]<<endl;else  cout<<ans[n]<<endl;return 0;
    }
    
  • 正解

    • 考虑 \(a_{x}\) 在最终单峰序列中位于 \(a_{k}\) 前还是 \(a_{k}\) 后,两者产生的逆序对/交换次数分别为 \(\sum\limits_{i=1}^{x-1}[a_{i}>a_{x}],\sum\limits_{i=x+1}^{r}[a_{i}>a_{x}]\) ,不妨设两个值分别为 \(p_{x},q_{x,r}\) 。贪心地取 \(\min(p_{x},q_{x,r})\) 作为其贡献即可。
    • 观察到 \(q_{x,r}\) 随着 \(r\) 单调不降,考虑二分找到其分界点 \(limit_{x}\) 使得 \(limit_{x}\) 以前 \(p_{x} \ge q_{x,r}\)\(limit_{x}\) 以后 \(p_{x}<q_{x,r}\)
    • 动态维护 \(q_{x,r}\) 的变化,此时是一个矩阵加、单点查询的形式,扫描线即可。
    点击查看代码
    ll a[500010],pos[500010],sum[500010];
    vector<ll>c[500010];
    struct BIT
    {ll c[500010];ll lowbit(ll x){return (x&(-x));}void clear(){memset(c,0,sizeof(c));}void add(ll n,ll x,ll val){for(ll i=x;i<=n;i+=lowbit(i))  c[i]+=val;}void update(ll n,ll l,ll r,ll val){add(n,l,val);  add(n,r+1,-val);}ll getsum(ll x){ll ans=0;for(ll i=x;i>=1;i-=lowbit(i))  ans+=c[i];return ans;}
    }B[2];
    int main()
    {
    #define Isaac
    #ifdef Isaacfreopen("seq.in","r",stdin);freopen("seq.out","w",stdout);
    #endifll n,t,ans,l,r,mid,i,j;scanf("%lld%lld",&n,&t);for(i=1;i<=n;i++){scanf("%lld",&a[i]);  pos[a[i]]=i;B[0].add(n,a[i],1);sum[i]=i-B[0].getsum(a[i]);}B[0].clear();for(i=n;i>=1;i--){l=pos[i];  r=n;  ans=0;while(l<=r){mid=(l+r)/2;if(B[0].getsum(mid)-B[0].getsum(pos[i])<=sum[pos[i]]){ans=mid;l=mid+1;}else  r=mid-1;}c[ans+1].push_back(a[pos[i]]);B[0].add(n,pos[i],1);}ans=0;for(i=1;i<=n;i++){if(a[i]+1<=n)  B[1].update(n,a[i]+1,n,1);for(j=0;j<c[i].size();j++)  B[1].update(n,c[i][j],n,-1);ans+=B[1].getsum(a[i]);if(i==n||t==1)  printf("%lld\n",ans);}return 0;
    }

\(T2\) B. 划分线段 \(10pts\)

  • 原题: CF1510H Hard Optimization

  • 部分分

    • \(10pts\) :输出 \(\max(r_{2}-l_{1},r_{1}-l_{2})\)
  • 正解

\(T3\) C. 红蓝树 \(20pts\)

  • 部分分

    • \(20pts\) :模拟。
    点击查看代码
    int a[600010];
    stack<int>s;
    int main()
    {
    #define Isaac
    #ifdef Isaacfreopen("rbtree.in","r",stdin);freopen("rbtree.out","w",stdout);
    #endifint n,m,pd,l,r,ans=0,col,i,j;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)  {scanf("%d",&a[i]);  a[i]--;}for(j=1;j<=m;j++){scanf("%d%d%d",&pd,&l,&r);if(pd==1)  for(i=l;i<=r;i++)  a[i]^=1;else{ans=col=0;while(s.empty()==0)  s.pop();for(i=l;i<=r;i++){if(a[i]<=1){ans+=(a[i]||col);  s.push((a[i]||col));col=0;}else  if(s.empty()==0){col|=s.top();s.pop();}}printf("%d\n",ans);}}return 0;
    }
    
  • 正解

总结

  • 罚坐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890259.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置github图床+picgo-core上传+jsdelivr

GitHub图床GitHub图床部分参考自教程Github图床+PicGo+JsDelivr+imgbot+automerge-action.imgbot图片压缩图片压缩部分参考自教程Github图床+PicGo+JsDelivr+imgbot+automerge-action.automerge-action最新版地址https://github.com/marketplace/actions/merge-pull-requests-a…

让博客在关键日子弹窗-变灰-放烟花

本文大体上参考自[1],新增了放烟花功能。前置教程 参见[1:1]。 {% note warning flat%}SweetAlert库应该在day.js和lunar.js前面引入!{% endnote %} 放烟花实现SweetAlert2库[2],支持弹窗含有图片,也就是可以弹窗一个放烟花的gif,当然你也可以使用html的visible属性来可视化…

2025中国十大HR SaaS厂商,企业应该如何选择最佳合作伙伴

人力资源软件供应商的价值已远超工具范畴——它们是组织能力的“放大器”、管理革命的“催化剂”。在数字化转型中,企业通过与其深度合作,不仅能实现运营效率的指数级提升,更将人力资本转化为战略资产,构建起适应AI时代的核心竞争力。选择与怎样的供应商同行,将直接决定企…

redis - [09] redis.conf详解

题记部分 配置文件unit单位对大小写不敏感。可以将多个配置文件配置进来绑定ip保护模式 & 端口守护进程,默认是no,需要改成yes如果需要后台运行,需要制定进程文件(pid)指定日志级别,生产环境默认notice。logfile: 日志文件位置名配置数据库的数量,默认16个是否总是…

试用一下Qexo这个Hexo博客内容管理系统

本文由Qexo书写并发布。Qexo介绍 Qexo | 一个美观、强大的在线 静态博客 管理器 (oplog.cn) 本文就不详细介绍Qexo了,官方文档写的很清晰了2333测试样式 测试一下github markdown样式是否正确显示。 This README can be used as a reference for github-flavored-markdown sty…

双链表与双循环链表的C语言实现

双链表与双循环链表的C语言实现 目录双链表与双循环链表的C语言实现双链表的增删查改双循环链表的增删查改 双链表的增删查改 /*双链表*/#include<stdio.h> #include<stdlib.h>typedef struct Node{int data;struct Node* pre;struct Node* next; }Node;Node* init…

Redis十大数据类型及命令详解

Redis数据类型 1、redis字符串(String)string是redis最基本的类型,一个key对应一个value string类型是二进制安全的,意思是redis的string可以包含任何数据。例如说是jpg图片或者序列化对象 一个redis中字符串value最多可以是512M应用场景: 缓存:存储用户会话、页面内容(…

第6章-控件

控件,继承自 System.Windows.Contorl 类 控件分类内容控件:Label/Button/ToolTip/ScrollViewer 带有标题的内容控件:TabItem/GroupBox/Expander 文本控件:Textbox/PasswordBox/RichTextBox 列表控件:ListBox/ComboBox 基于范围的控件:Slider/ProgressBar 日期控件:Calen…

第5章-路由事件

Handler: 处理器 Preview: 预览、这指隧道 Raise: 引发 Bubble: 冒泡 Handled: 已处理理解路由事件 事件路由允许源自某个元素的事件由另一个元素引发。 定义、注册和封装路由事件 public partial class Window1 : Window {// 定义路由事件,必须是 static readonly// 类型 Rou…

mysql 数据目录

前言 简单介绍一下mysql的数据目录。 正文 对于mysql,我们关心的一般是数据部分,那么关心的就是数据目录。 我们查看一下数据目录的位置。 SHOW VARIABLES LIKE datadir看一下数据目录的位置:再对比一下我们数据库的信息:好像除了这个information_schema 好像都有一个目录。 …

三句话生成 P5.js 粒子特效代码,人人都可以做交互式数字艺术

前几天在上海西岸艺术中心的全球开发者先锋大会GDC2025,通义灵码的老朋友-@同济子豪兄受邀参会,并带领大家观看了本届大会两大重磅看点:具身智能人形机器人和 AI 程序员编程写代码。前几天在上海西岸艺术中心的全球开发者先锋大会GDC2025,通义灵码的老朋友-@同济子豪兄受邀…