hdu6058[链表维护] 2017多校3
用一个双向链表来查找比当前元素大的前k-1个元素和后k-1个元素 ,从小到大枚举x,算完x的贡献后将x从链表中删除,优化到O(nk)。
- /*hdu6058[链表维护] 2017多效3*/
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long LL;
- int T, n, k, temp;
- int pos[], pre[], nxt[];
- LL a[], b[];
- LL ans = ;
- LL Getans(int x) {
- int r1 = , r2 = ;
- LL ret = ;
- for (int i = x; i >= && r1 <= k; i = pre[i]) {
- a[++r1] = i - pre[i];//向前找k-1个比当前元素大的
- }
- for (int i = x; i <= n && r2 <= k; i = nxt[i]) {
- b[++r2] = nxt[i] - i;//向后找k-1个比当前元素大的
- }
- for (int i = ; i <= r1; i++) {
- if (k - i + <= r2 && k - i + >= ) {
- //cout << x << ' ' << a[i] << ' ' << b[k - i + 1] << endl;
- ret += a[i] * b[k - i + ];
- }
- }
- return ret;
- }
- void del(int i) {
- pre[nxt[i]] = pre[i];
- nxt[pre[i]] = nxt[i];
- }
- void connect(int u, int v) {
- nxt[u] = v;
- pre[v] = u;
- }
- void solve() {
- for (int i = ; i <= n; i++)
- connect(i, i + );
- for (int i = ; i <= n; i++) {
- ans += Getans(pos[i]) * i;
- del(pos[i]);//每次删去一个, 保证其他所有元素都比当前元素大
- }
- printf("%lld\n", ans);
- }
- int main() {
- scanf("%d", &T);
- while (T--) {
- ans = ;
- scanf("%d %d", &n, &k);
- for (int i = ; i <= n; i++) {
- scanf("%d", &temp);
- pos[temp] = i;
- }
- solve();
- }
- return ;
- }
hdu6058[链表维护] 2017多校3的更多相关文章
- 【链表】2017多校训练三 HDU 6058 Kanade's sum
acm.hdu.edu.cn/showproblem.php?pid=6058 [题意] 给定一个排列,计算 [思路] 计算排列A中每个数的贡献,即对于每个ai,计算有ni个区间满足ai是区间中的第k ...
- 2017 多校4 Wavel Sequence
2017 多校4 Wavel Sequence 题意: Formally, he defines a sequence \(a_1,a_2,...,a_n\) as ''wavel'' if and ...
- hdu6074[并查集+LCA+思维] 2017多校4
看了标答感觉思路清晰了许多,用并查集来维护全联通块的点数和边权和. 用另一个up[]数组(也是并查集)来保证每条边不会被重复附权值,这样我们只要将询问按权值从小到大排序,一定能的到最小的边权和与联通块 ...
- 2017 多校5 hdu 6093 Rikka with Number
2017 多校5 Rikka with Number(数学 + 数位dp) 题意: 统计\([L,R]\)内 有多少数字 满足在某个\(d(d>=2)\)进制下是\(d\)的全排列的 \(1 & ...
- 2017 多校5 Rikka with String
2017 多校5 Rikka with String(ac自动机+dp) 题意: Yuta has \(n\) \(01\) strings \(s_i\), and he wants to know ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- 2017 多校3 hdu 6061 RXD and functions
2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...
- 2017 多校2 hdu 6053 TrickGCD
2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...
- 2017 多校1 I Curse Myself
2017 多校2 I Curse Myself(第k小生成树) 题目: 给一张带权无向连通图,该图的任意一条边最多只会经过一个简单环,定义\(V(k)为第k小生成树的权值和\),求出\(\sum_{k ...
随机推荐
- jmeter并发定时器
jmeter并发定时器
- MySQL存储过程(更新指定字段的数据)
mysql存储过程示例: USE 数据库名称;DROP PROCEDURE IF EXISTS 数据库名称.存储过程名称;delimiter $$CREATE PROCEDURE 数据库名称.存储过程 ...
- FZU 1977 Pandora adventure (插头DP,常规)
题意:有一个n*m矩阵,其中有些格子必走,有些格子不可走,其他格子是可走也可不走,问有多少条哈密顿回路? 思路: 本来是一道很简单的题,代码写多了连白痴bug都查不出了,竟然用i>=ex& ...
- 机器学习之-奇异值分解(SVD)原理详解及推导
转载 http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有需要补充 ...
- Bootstrap历练实例:基本按钮群组
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Bootstrap 表格2
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Flask——基础知识
Flask应用程序 一个简单的Flask应用程序 # 导入flask程序 from flask import Flask # 初始化flask对象 app = Flask(__name__) # 装饰 ...
- mysql 复制中的 paxso 的两阶段和事务两阶段的区别
1.普通的两阶段是 推送不同的数据给不同的主机,一旦出现网络中断,造成问题是不可服务. 因为本身有锁,故无所谓. 2.paxos 的两阶段是将相同的 数据给不同的主机,一旦超过半数即可认为成功.
- STATIC 和 CLASS
STATIC 和 CLASS 由 王巍 (@ONEVCAT) 发布于 2015/01/28 Swift 中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是 static 和 class ...
- 初涉二维数点问题&&bzoj1935: [Shoi2007]Tree 园丁的烦恼
离线好评 Description 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草.有一天国王漫步在花园里,若有所思,他问一个 ...