当前位置: 首页 > news >正文

题解:CF387E George and Cards

首先思路是很清晰的,该删的数从小到大开始删,这样在删到当前数的时候,比当前数小的数可以尽量少,能选的区间自然就更大了。

考虑如何实现,维护一个 set,从小到大遍历每个数,若当前数不需要被删除,就将其下标加入 set 中;若需要删除就在 set 中二分出恰好比当前数位置后的数,也就是区间的 \(r+1\);把指针减一,就得到了区间的 \(l-1\)。直接计算答案即可,但由于已经被删的数是不计入区间的,所以我们还要再用一个树状数组维护 \(l\)\(r\) 之间实际上还有几个没有被删的数,也就是删掉当前数的得分。

#include<bits/stdc++.h>
#define MAXN 1000005
#define int long long
using namespace std;
const int inf=1e9;
int n,k,c[MAXN],a[MAXN],p[MAXN],b[MAXN],t[MAXN],ans;
int lb(int x){return x&(-x);
}
void add(int x,int y){for(int i=x;i<=n;i+=lb(i))t[i]+=y;
}
int sum(int x){int tans=0;for(int i=x;i;i-=lb(i))tans+=t[i];return tans;
}
int read(){char c=getchar();int tmp=0;while(c<'0'||c>'9')c=getchar();while(c>='0'&&c<='9')tmp=tmp*10+(c-'0'),c=getchar();return tmp;
}
set<int>s;
set<int>::iterator it;
signed main(){n=read(),k=read();for(int i=1;i<=n;i++)a[i]=read(),p[a[i]]=i,add(i,1);for(int i=1;i<=k;i++)b[i]=read(),c[b[i]]++;s.insert(0),s.insert(n+1);for(int i=1;i<=n;i++){int pos=p[i];if(c[i]){s.insert(pos);}else{it=s.upper_bound(pos);int r=*it-1,l=*(--it);ans+=sum(r)-sum(l);add(pos,-1);}}printf("%lld\n",ans);return 0;
}

AC 记录

http://www.zskr.cn/news/37899.html

相关文章:

  • 题解:CF712D Memory and Scores
  • 拾壹月贰
  • [题解]CSP-S 2025 T1~T3 题解
  • CSP-S游记
  • NOIP 2025 游记 退役记
  • 一个万古常青的、小而美的输入法
  • 条件表达式中的赋值问题
  • Jenkins-CICD项目自动化部署
  • 第k小的数的分治算法
  • 一个灵感:思维的断章
  • 10.30总结
  • 世界计划:无法歌唱的初音未来
  • 一、RK3562板卡上手
  • 2025 年 11 月数控激光去毛刺机,冲压件去毛刺机,精密去毛刺机厂家最新推荐,实力品牌深度解析采购无忧之选!
  • AT ARC156C Tree and LCS 题解
  • CSPT漏洞浅析
  • Awesome Neovim - 精选Neovim插件大全
  • 不会AI编程?没关系!这几个框架也让你也能开发AI聊天助手!
  • 别只怪客户端宕机!还有这些导致 Redis 分布式锁“死锁”的原因 - 公众号
  • 第13天(中等题 滑动窗口)
  • 我重生了,重生到了CSP前——高中物理电学速通
  • 第二章算法作业
  • Linux模板机优化实操
  • 渗透知识靶场实战
  • 游记 CSP-S2025
  • 2025 年 11 月 CBN 砂轮厂家最新推荐:结合剂迭代 + 精度优化,高耐用产品选购指南
  • 2025 年 11 月 CBN 砂轮厂家最新推荐:磨料优化 + 工艺升级,高适配产品选购指南
  • 2025 年 11 月运动木地板厂家最新推荐,配方精研与效能焕新!—— 实力品牌深度解析采购无忧之选!
  • 【软考】信安中级密码学专题
  • 2025 年 11 月 PVC 地板厂家最新推荐,聚焦成分安全与功效持续的优质产品解析