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

#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 = , INF = 0x3F3F3F3F, MOD =  ;
#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 = ;
    for(int i=x;i>;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 = , r = n + ;
    while(l < r){
        int m = (l + r)>>;
        int s = sum(m);
        if(s < k){
            l = m + ;
        }else{
            r = m;
        }
    }
    return b[l -].num;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        scanf("%d %d %d", &n, &m, &k);
        for(int i = ; i < n; i++){
            scanf("%d", &a[i]);
            b[i].num = a[i];
            b[i].i = i;
        }
        MS(C, );
        sort(b, b + n, cmp);         for(int i = ; i< n; i++){
            rak[b[i].i] = i + ;
        }         LL ans = ;
        for(int i = ; i < m; i++){
            add(rak[i % n], );
        }         for(int i = m + ; i <  * m +  ;i++){
            add(rak[i % n], );
        }         for(int i = m ; i <= m + n - ; i++){
            ans += getK(a[i % n]);
            ans %= MOD;
            if(i != m + n - ){
                add(rak[(i - m)%n], -);
                add(rak[(i + m + ) % n], );
                add(rak[i % n], );
                add(rak[(i + ) % n], -);
            }
        }
        printf("%I64d\n", ans % MOD);
    }
    return ;

}

HDU1899 Sum the K-th's(树状数组)的更多相关文章

  1. bzoj 3110: [Zjoi2013]K大数查询 树状数组套线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1384  Solved: 629[Submit][Stat ...

  2. ZOJ 2112 Dynamic Rankings (动态第k大,树状数组套主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  3. Maximum Subsequence Sum【最大连续子序列+树状数组解决】

    Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i < ...

  4. codeforces 1269E K Integers (二分+树状数组)

    链接:https://codeforces.com/contest/1269/problem/E 题意:给一个序列P1,P2,P3,P4....Pi,每次可以交换两个相邻的元素,执行最小次数的交换移动 ...

  5. BZOJ 3110: [Zjoi2013]K大数查询( 树状数组套主席树 )

    BIT+(可持久化)权值线段树, 用到了BIT的差分技巧. 时间复杂度O(Nlog^2(N)) ---------------------------------------------------- ...

  6. Matrix Sum HihoCoder - 1336 二维树状数组 感觉好像二维差分。

    #include<cstdio> #include<cstring> using namespace std; typedef long long ll; ; ; ll c[N ...

  7. BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)

    题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...

  8. uva 12356 Army Buddies 树状数组解法 树状数组求加和恰为k的最小项号 难度:1

    Nlogonia is fighting a ruthless war against the neighboring country of Cubiconia. The Chief General ...

  9. BZOJ 3196 Tyvj 1730 二逼平衡树 ——树状数组套主席树

    [题目分析] 听说是树套树.(雾) 怒写树状数组套主席树,然后就Rank1了.23333 单点修改,区间查询+k大数查询=树状数组套主席树. [代码] #include <cstdio> ...

  10. {POJ}{树状数组}

    总结一下树状数组的题目: {POJ}{3928}{Ping Pong} 非常好的题目,要求寻找一个数组中满足A[i]<A[k]<A[j]的个数,其中i<k<j(或者相反).很巧 ...

随机推荐

  1. 如何用phpstorm编辑远程项目

    背景介绍:LAMP开发是很多公司喜欢采用的技术组合,故而做php开发,使用linux环境也是很多公司的要求.本文就来介绍下如何在windows下,使用phpstorm集成开发环境,来开发放在linux ...

  2. POJ 3281 网络流dinic算法

    B - Dining Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...

  3. class.equals

    public boolean equals(Object obj) 1.自身和自身应该是equals的. X.equals(x) return ture2.如果A等于B, 那么B也就等于A . X.e ...

  4. PHP: How to print a debug log?

    file_put_contents('php://stderr', print_r("hello ", TRUE)); 转自: http://stackoverflow.com/q ...

  5. devstack meaning of: n-cond, n-novnc and n-xvnc

    devstack has shortened names for a number of services, e.g. g-api = glance api g-reg = glance regist ...

  6. varchar 和 nvarchar 的区别和使用

    区别: 1.nvarchar 不管是一个字符还是一个汉字,都存为2个字节.varchar 汉字是两个字节,其它字符为1个字节. 2.nvarchar(n):包含n个字符的可变长度Unicode字符数据 ...

  7. codeforces 499B.Lecture 解题报告

    题目链接:http://codeforces.com/problemset/problem/499/B 题目意思:给出两种语言下 m 个单词表(word1, word2)的一一对应,以及 profes ...

  8. webclient 和httpclient 应用

    //webclient应用 MyImageServerEntities db = new MyImageServerEntities(); public ActionResult Index() { ...

  9. 【编程题目】设计包含 min 函数的栈

    2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...

  10. Jquery如何判断Radiobutton是否选中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...