枚举,每次增加点,删除点

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
#include<utility>
using namespace std;
typedef long long LL;
const int N = 100008, INF = 0x3F3F3F3F, MOD = 1000000007 ;
#define MS(a, num) memset(a, num, sizeof(a))
int C[N];
int n, m, k;
int a[N], rak[N];

struct data{
    int num, i;
}b[N];
inline int lowbit(int x){
    return x&-x;
}
inline void add(int x, int val){//将第x个数增加val,从1计数
    for(int i=x;i<=n;i+=lowbit(i)){
        C[i] += val;
    }
}
inline int sum(int x){//求1到x的和
    int ret = 0;
    for(int i=x;i>0;i-=lowbit(i)){
        ret+=C[i];
    }
    return ret;
}

bool cmp(const data &a, const data &b){
    return a.num < b.num;
}

int getK(int val){
    int l = 1, r = n + 1;
    while(l < r){
        int m = (l + r)>>1;
        int s = sum(m);
        if(s < k){
            l = m + 1;
        }else{
            r = m;
        }
    }
    return b[l -1].num;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        scanf("%d %d %d", &n, &m, &k);
        for(int i = 0; i < n; i++){
            scanf("%d", &a[i]);
            b[i].num = a[i];
            b[i].i = i;
        }
        MS(C, 0);
        sort(b, b + n, cmp);

for(int i = 0; i< n; i++){
            rak[b[i].i] = i + 1;
        }

LL ans = 0;
        for(int i = 0; i < m; i++){
            add(rak[i % n], 1);
        }

for(int i = m + 1; i < 2 * m + 1 ;i++){
            add(rak[i % n], 1);
        }

for(int i = m ; i <= m + n -1 ; i++){
            ans += getK(a[i % n]);
            ans %= MOD;
            if(i != m + n -1 ){
                add(rak[(i - m)%n], -1);
                add(rak[(i + m + 1) % n], 1);
                add(rak[i % n], 1);
                add(rak[(i + 1) % n], -1);
            }
        }
        printf("%I64d\n", ans % MOD);
    }
    return 0;

}

转载于:https://www.cnblogs.com/IMGavin/p/5708417.html

HDU1899 Sum the K-th's(树状数组)相关推荐

  1. 动态区间第k小:树状数组套权值线段树

    所谓树状数组套权值线段树,就是在树状树组上套权值线段树 (逃) 解析 如何解决静态区间第k小? 使用主席树就ok啦 辣么如何解决动态区间第k小嘞- 我们想想主席树为啥不能解决动态区间第k小 因为如果改 ...

  2. ACM入门之【树状数组】

    树状数组和线段树具有相似的功能,但他俩毕竟还有一些区别:树状数组能有的操作,线段树一定有:线段树有的操作, 树状数组不一定有.但是树状数组的代码要比线段树短,思维更清晰,速度也更快,在解决一些单点修改 ...

  3. Educational Codeforces Round 17 E. Radio stations cdq分治 + 树状数组

    传送门 文章目录 题意 思路: 题意 有nnn个电台,对于每个电台iii有三个参数xi,ri,fix_i,r_i,f_ixi​,ri​,fi​,分别指他们的坐标.作用半径.频率.如果两个电台频率差值在 ...

  4. 树状数组 讲解和题目集

    树状数组 树状数组作为一种实现简单.应用较广的高级数据结构,在OI界的地位越来越重要,下面我来简单介绍一下树状数组和它的简单应用. 一.树状数组简介 树状数组:顾名思义,是一种数组,其中包含了树的思想 ...

  5. 快乐地打牢基础(4)——树状数组

    在解题的过程中,我们想维护一个数组的前缀和s[i] = A[1] + A[2] +-+A[i].我们改变任意一个A[i],那么S[i]之后都会发生变化,朴素写法调整前缀和S最坏的情况需要O(n)的时间 ...

  6. AcWing 蓝桥杯AB组辅导课 05、树状数组与线段树

    文章目录 前言 一.树状数组 1.1.树状数组知识点 1.2.树状数组代码模板 模板题:AcWing 1264. 动态求连续区间和 例题 例题1.AcWing 1265. 数星星[中等,信息学奥赛一本 ...

  7. M元上升子序列【树状数组+dp】

    多元组-牛客网 题解 ac代码 #include<iostream> #include<cstring> #include<algorithm> #include& ...

  8. 【USACO】奶牛抗议 树状数组+dp

    题目描述 约翰家的 N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第 i 位的奶牛 的理智度为 A i ,数字可正可负. 约翰希望奶牛在抗议时保持理性,为此,他打算将这条队伍分割成几 ...

  9. POJ 2299 Ultra-QuickSort(树状数组 + 离散)

    链接:http://poj.org/problem?id=2299 题意:给出N个数组成的数列A(0 <= A[i] <= 999,999,999),求该数列逆序对的数量. 分析:题目所谓 ...

  10. BZOJ.2738.矩阵乘法(整体二分 二维树状数组)

    题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理 ...

最新文章

  1. 由于应用universal link校验不通过_垃圾吊称重校验砝码2000kg市场行情分析
  2. 什么是android刷机包,什么是安卓RAM?安卓RAM和安卓ROM有什么区别?
  3. 深入理解MSTP域和端口角色
  4. android学习的一点点网站资料
  5. 二维数组子数组矩形和
  6. 一套小学生的试卷。。。
  7. ubuntu20.04 下查看(改变)本地端口开放情况,开启和关闭防火墙
  8. 实习成长之路:Redis为什么快?为什么Redis同样也是String字符串,但是要比Java性能好?SDS数据结构是什么?什么是紧凑型编程技巧?
  9. 调查称82%网友面对安全问题无从下手
  10. 如何将c语言程序变成应用,C语言代码转换为应用程序
  11. 使用OpenCV测量图像中物体之间的距离
  12. 量子科技商业化寻路,资本造势但技术落地成难|科股宝
  13. GTX 1050ti和GTX960哪个好
  14. 微信跳一跳python自动代码解读1.0
  15. 第四课:如何安装树莓派系统
  16. dataframe去掉行索引_DataFrame按索引删除行、列
  17. opencv光线补偿_光线补偿算法的实现
  18. 运维的本质是什么?阿里“无人化”智能运维平台的演进
  19. 电信3G上网卡自动重拨
  20. STM8L 读写EEPROM(24LC64)

热门文章

  1. LSI IOC,ROC,HBA,Raid Adapter
  2. RHCE认证培训+考试七天实录(二)
  3. Linux用户管理-服务管理
  4. 深入理解Java Class反射机制
  5. 三框架:使用数据源dbcp注意
  6. VM Depot 分布式计算框架主题应用精选
  7. java开发都需要学什么
  8. Windows Server 2008 R2 SP1遗忘管理员密码后的解决方案
  9. springboot文字转语音(jacob)
  10. WPF QuickStart系列之样式和模板(Style and Template)