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

题解:洛谷 P4113 [HEOI2012] 采花

题目https://www.luogu.com.cn/problem/P4113

运用类似于P1972 [SDOI2009] HH的项链的操作,将数据离线下来处理。

按照区间右端点从小到大排序。

问题是数量大于等于 2 的时候才能算进去。

于是乎我们用两个数组维护倒数第二次出现和最后一次出现的地方。

每次在树状数组中仅保留倒数第二次出现的贡献。

实现

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,color,m,a[2000005],ans[2000005],c[2000005],l[2000005],r[2000005];
bool vis[2000005];
struct node{
    int l,r,id;
    bool operator<(const node &T)const{
        return r<T.r;
    }
}q[2000005];
int lowbit(int x){
    return x&(-x);
}
int query(int x){
    int sum=0;
    while(x){
        sum+=c[x];
        x-=lowbit(x);
    }
    return sum;
}
void modify(int x,int val){
    while(x<=n){
        c[x]+=val;
        x+=lowbit(x);
    }
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>n>>color>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        cin>>q[i].l>>q[i].r;
        q[i].id=i;
    }
    sort(q+1,q+m+1);
    for(int i=1,j=1;i<=m;i++){
        for(;j<=q[i].r;j++){
            if(!vis[a[j]]){ // 如果当前颜色是第一次出现
                vis[a[j]]=true;
                l[a[j]]=j; // 仅标记不做操作
            }else if(!r[a[j]]){ // 第二次出现
                r[a[j]]=j;
                modify(l[a[j]],1); // 加上贡献
            }else{ // 重复出现
                modify(l[a[j]],-1);
                modify(r[a[j]],1);
                l[a[j]]=r[a[j]]; // 替换
                r[a[j]]=j;
            }
        }
        ans[q[i].id]=query(q[i].r)-query(q[i].l-1);
    }
    for(int i=1;i<=m;i++){
        cout<<ans[i]<<'\n';
    }
    return 0;
}


http://www.kler.cn/a/547652.html

相关文章:

  • Pytorch深度学习教程_2_Numpy数值计算
  • 计算机性能与网络体系结构探讨 —— 基于《计算机网络》谢希仁第八版
  • 中国AI“拥抱开源”给世界的启示——Anko
  • CAS单点登录(第7版)12.密码管理
  • markdown|mermaid|typora绘制流程图的连接线类型怎么修改?
  • 【STM32】增量型旋钮编码器
  • 伪装目标检测(Camouflaged Object Detection, COD)教程
  • 使用llama.cpp在gpu和cpu上运行deepseek-r1 7b的性能对比
  • 【日常经验】五种密码加密方式比较
  • 基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录
  • JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略
  • Agent快速构建框架的langGraph到底是什么及案例
  • Android Studio:EditText常见4种监听方式
  • 鸿蒙Harmony通过命令行生成doc
  • C# windowForms 的DataGridView控件的使用
  • 【鸿蒙在OpenHarmony系统上集成OpenCV,实现图片裁剪】
  • 蓝耘云智算|使用 Deepseek R1 模型优化 BERT 在 NLP 任务中的表现
  • DeepSeek HuggingFace 70B Llama 版本 (DeepSeek-R1-Distill-Llama-70B)
  • P5693 EI 的第六分块 Solution
  • SpringBoot Configuration Annotation Processor not configured 解决方案和详细问题分析以及作用