【2017多校】HDU6058 Kanade's sum 【链表】
来源:互联网 发布:淘宝爱玩电玩数码店 编辑:程序博客网 时间:2024/06/07 23:48
题目链接
枚举1到n,当i是第k大时,区间左端点到右端点 比i大的数必须=k-1个
将a[1..n]放链表里,枚举完i,则将i删去,则链表中所有元素都>当前枚举的数,O(k)即可统计出区间个数
#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) memset(a,x,sizeof(a))#define lowbit(x) ((x)&-(x))using namespace std;const int N = 5e5+5;int a[N];int idx[N];list<int>::iterator Ref[N];list<int>ls;ll slove(int n,int k){ list<int>::iterator itL,itR; int cntL,cntR; ll ans=0; for(int i=1;i<=n;++i){ itL=itR=Ref[i]; cntL=0,cntR=0;//itL-Ref[i]间多少个数比i大 ,itR-Ref[i]间... for(int x=0;x<=k-1;++x){ while(cntR<k-1-x&&itR!=Ref[n+1]){ ++itR; ++cntR; } if(cntR>k-1-x||itR==Ref[n+1]){ --itR; --cntR; } if(cntR+cntL==k-1){ int CountL,CountR=CountL=1; auto tmp=itL; --tmp; CountL=idx[*itL]-idx[*tmp]; tmp=itR; ++tmp; CountR=idx[*tmp]-idx[*itR]; ans+=(ll)CountL*CountR*i; } --itL; if(itL==Ref[0]){ break; } ++cntL; } ls.erase(Ref[i]); } return ans;}int main(){ //freopen("/home/lu/code/r.txt","r",stdin); //freopen("/home/lu/code/w.txt","w",stdout); int T; scanf("%d",&T); while(T--){ int n,k; scanf("%d%d",&n,&k); ls.clear(); ls.push_back(0); idx[0]=0; Ref[0]=ls.begin(); for(int i=1;i<=n;++i){ scanf("%d",&a[i]); ls.push_back(a[i]); Ref[a[i]]=--ls.end(); idx[a[i]]=i; } ls.push_back(n+1); idx[n+1]=n+1; Ref[n+1]=--ls.end(); printf("%lld\n",slove(n,k)); } return 0;}
阅读全文
0 0
- 【2017多校】HDU6058 Kanade's sum 【链表】
- HDU6058-Kanade's sum
- hdu6058-Kanade's sum
- hdu6058 Kanade's sum
- HDU6058-Kanade's sum
- HDU6058 Kanade's sum
- HDU6058-Kanade's sum
- HDU6058 Kanade's sum
- hdu6058 Kanade's sum
- 【HDU6058】Kanade's sum(暴力 or 链表)
- HDU6058-Kanade's sum 链表+思维
- HDU6058 Kanade's sum(链表)
- HDU6058 Kanade's sum【模拟】
- HDU6058 2017杭电多校联赛第三场-Kanade's sum
- 2017杭电多校联赛team3 Kanade's sum hdu6058 快速幂
- Hdu6058 Kanade's sum(2017多校第3场)
- 2017多校训练Contest3: 1003 Kanade's sum hdu6058
- Kanade's sum 2017多校#3 链表
- linux防火墙基础及iptables数据流
- php 根据标签的属性值来爬取内容的正则表达式
- 【HDU 6040 Hints of sd0061】 思维 & STL
- Hbase的常用shell操作
- js进度条
- 【2017多校】HDU6058 Kanade's sum 【链表】
- Best_Time_to_Buy_and_Sell_Stock_II
- 简单说明Oracle数据库中对死锁的查询及解决方法
- 环境培训资源链接
- 钓鱼网站+邮件诈骗 实例分析
- JSPs only permit GET POST or HEAD的解决方案(REST风格)
- 排序算法---选择排序
- Fminunc函数和Optimset函数
- C++常变量