HDU6058Kanade's sum(思维+链表模拟)
来源:互联网 发布:windows vnc客户端 编辑:程序博客网 时间:2024/06/16 22:21
题目链接
题意:
给出一个n和一个k,求1~n的每个区间的第k大的总和是多少,区间长度小于k的话,贡献为0.
分析:
我们只要求出对于一个数x左边最近的k个比他大的和右边最近k个比他大的,扫一下就可以知道有几个区间的k大值是x.
我们考虑从小到大枚举x,每次维护一个链表,链表里只有>=x的数,那么往左往右找只要暴力跳k次,删除也是O(1)的。
时间复杂度:O(nk)
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 500010;int Case, n, K, num[N], pos[N], pre[N], nxt[N];inline void del(int x){ pre[nxt[x]] = pre[x]; nxt[pre[x]] = nxt[x];}inline ll solve(int x){ int a[100], b[100]; int ca = 0, cb = 0; for(int i = x; i; i = pre[i]) { a[++ca] = i - pre[i]; if(ca == K) break; } for(int i = x; i <= n; i = nxt[i]) { b[++cb] = nxt[i] - i; if(cb == K) break; } ll t = 0; for(int i = 1; i <= ca; i++) if(K - i + 1 <= cb) t += 1LL * a[i] * b[K-i+1]; return t;}int main(){ scanf("%d", &Case); while(Case--) { scanf("%d%d", &n, &K); for(int i = 1; i <= n; i++) scanf("%d", &num[i]), pos[num[i]] = i; for(int i = 0; i <= n+1; i++) pre[i] = i-1, nxt[i] = i+1; pre[0] = 0; nxt[n+1] = n+1; ll ans = 0; for(int i = 1; i <= n; i++) { int x = pos[i]; ans += solve(x) * i; del(x); } printf("%I64d\n", ans); } return 0;}
阅读全文
0 0
- HDU6058Kanade's sum(思维+链表模拟)
- Hdu 6058 Kanade's sum【思维+链表模拟】
- HDU 6058 Kanade's sum 思维+ 模拟链表
- hdu 6058 Kanade's sum(思维)
- HDU 6058 Kanade's sum(思维)
- HDU 6058 Kanade's sum(模拟)
- Uva 10881 Piotr's Ants (模拟+思维)
- HDU6058 Kanade's sum【模拟】
- HDU-Kanade's sum-模拟
- HDU6058-Kanade's sum 链表+思维
- 2017 Multi-University Training Contest 3 && HDOJ 6058 Kanade's sum 【链表模拟】
- hdu 6058 Kanade's sum(模拟)
- HDU 2017 多校联合训练赛3 3003 6058 Kanade's sum 枚举 模拟链表
- Kanade's sum(链表优化)
- HDU 6058-Kanade's sum(多校训练第三场->模拟)
- Chtholly's request (思维)
- HDU-6215 Brute Force Sorting(思维、模拟链表)
- 思维模拟
- DataInputStream 和 DataOutputStream 数据的字节输入流和字节输出流
- Struts2——ActionContext的put方法和request的setAttribute方法
- 内存管理第一篇--HotSpotVM-内存管理介绍
- leetcode 651. 4 Keys Keyboard
- laravel5.4开启sql调试
- HDU6058Kanade's sum(思维+链表模拟)
- easyui Datebox日期框组件的使用
- 如何写好一份技术应聘简历
- MySQL [Err] 1093
- javaseday11(包,多线程)
- 网址汇总
- gradle-wrapper.properties中各属性的含义
- 关于子类继承父类属性的问题讨论(希望得到大神指点)
- NYOJ1015---二部图(判断是否是二分图:染色法)