[CTSC2008]图腾totem

(图腾这题做的我头疼 233)

记 f(xxxx) 为 xxxx 出现的次数,那么题目就是要求 f(1324) - f(1243) - f(1432)

最有难度的是把上面的式子转化一下,变成 f(1x2x) - f(14xx) - f(12xx) + f(1234)

这点除非对 f 的求法能一眼看出来,否则很难想到

后两个比较简单一点

f(1234) 可以想到用动规求

具体来讲,设 dp[i][j] (i≤n, 1≤j≤4) 表示第 i 个数后面接 j 个上升序列

这样转移就是 dp[i][j] = dp[k][j] + dp[k][j-1],其中 k 是一个满足 a[i] < a[k],i < k 的下标,k 可以用线段树求

然后就是求 f(12xx)了

利用类似的求法,首先维护一下每个点右边有多少点大于自己,这点用树状数组即可

然后维护一下上面的前缀和,这样就可以计算 f(12xx) 了

也就是用两层树状数组

至于 f(1x2x) 的求法理解起来并不难

按照高度从小到大把每个点放到原序列中去,不妨设当前点是 2

可以确定空位置比当前点大,而且当前点比之前放入的点大

那么为了使用计数原理需要求出空位置的数量

既然之前的点都比当前点小,假设左边点的下标集合为 S,当前点为 j

对于 S[i],我们希望知道 S[i] 到 j 有多少空位置

联想到区间和,又可以用树状数组啦

当然 |S| 可能会很大,既然这样干脆再套一层树状数组得了

这样就求出 f(1x2x) 了

f(14xx) 就变得玄学一点了

 利用类似上面的思想,把原序列从左到右放入一个排好序的序列

假设当前的是 4,那么排序序列里 4 左边的数都是 1

中间的空白就是原序列后面的 xx

然后假设 1 的下标是 i,4 的下标是 j,需要求 (j-i) * (j-i-1) / 2

也就是 (j-i) * (j-i) - (j-i)

令 r[i] 表示下标为 i 的数右边空白的数量

那么上面的式子就是 (r[i] - r[j]) ^ 2 - (r[i] - r[j])

拆开, r[i] ^ 2 + r[j] ^ 2 - 2 * r[i] * r[j] - (r[i] + r[j])

考虑左边的所有 1,那么要求的就是 sum { r[i] ^ 2 - r[i] } - sum { r[i] } * r[j] * 2 + ( r[j] ^ 2 - r[j] ) * ( #1 )

于是维护 r 与 r ^ 2 的区间和就好了

这题就这样解决啦

转载于:https://www.cnblogs.com/HailJedi/p/9302278.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Box Shadow CSS教程–如何向任何HTML元素添加投影

We can add a drop shadow to any HTML element using the CSS property box-shadow. Heres how. 我们可以使用CSS属性box-shadow将阴影添加到任何HTML元素。 这是如何做。 添加基本​​投影 (Adding a Basic Drop Shadow) Lets first set up some basic HTML elements to add…

数据结构学习笔记(一)——《大话数据结构》

第一章 数据结构绪论 基本概念和术语 数据 描述客观事物的符号&#xff0c;计算机中可以操作的对象&#xff0c;能被计算机识别并输入给计算机处理的符号的集合。包括整型、实型等数值类型和字符、声音、图像、视频等非数值类型。 数据元素 组成数据的、有一定意义的基本单位&a…

6. Z 字形变换

6. Z 字形变换 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a; P A H N A P L S I I G Y I R之后&#xff0c;你的输出需要从…

java的垃圾回收机制包括:主流回收算法和收集器(jvm的一个主要优化方向)

2019独角兽企业重金招聘Python工程师标准>>> java的垃圾回收机制是java语言的一大特色&#xff0c;解放了开发人员对内存的复杂控制&#xff0c;但如果你想要一个高级java开发人员&#xff0c;还是需要知道其机制&#xff0c;所谓不仅要会用还要知道其原理这样才能用…

北京dns服务器ip地址_什么是DNS? 域名系统,DNS服务器和IP地址概念介绍

北京dns服务器ip地址介绍 (Introduction) By the end of this article, you should have a better understanding of:在本文末尾&#xff0c;您应该对以下内容有更好的了解&#xff1a; What DNS is and what it does 什么是DNS及其作用 What DNS servers do DNS服务器做什么 …

767. 重构字符串

767. 重构字符串 给定一个字符串S&#xff0c;检查是否能重新排布其中的字母&#xff0c;使得两相邻的字符不同。 若可行&#xff0c;输出任意可行的结果。若不可行&#xff0c;返回空字符串。 示例 1: 输入: S “aab” 输出: “aba” 示例 2: 输入: S “aaab” 输出: “…

长生生物狂犬病疫苗造假

这两天暴发的长生生物狂犬病疫苗造假案真是很厉害&#xff0c;世人都说投资不过山海关还真有一定道理。 市场上长生生物的狂犬病疫苗约占1/4左右&#xff0c;是一个非常大的用量。 你别说&#xff0c;疫苗真的是非常适合造假&#xff1a; 1. 狂犬病有一定潜伏期&#xff0c;几天…

小程序 杂记

调试打印测试的方法&#xff1a; 方法1、显示提示框 &#xff08;微信自带的API&#xff09; wx.showToast({title: 成功,icon: success,duration: 2000 }) 方法2、js的console.log()方法 //test.js Page({onLoad: function(option){console.log(option.query)} }) wx.showToa…

使用fetch封装ajax_如何使用Fetch在JavaScript中进行AJAX调用

使用fetch封装ajaxI will be sharing bite sized learnings about JavaScript regularly in this series. Well cover JS fundamentals, browsers, DOM, system design, domain architecture and frameworks. 在本系列中&#xff0c;我将定期分享有关JavaScript的小知识。 我们…

RxJS笔记

RxJS 《深入浅出RxJS》读书笔记遗留问题 Observable的HOT与COLD对应的实际场景&#xff0c;以及在编码中的体现chapter1 html部分 测试你对时间的感觉按住我一秒钟然后松手你的时间&#xff1a;毫秒jquery实现 var time new Date().getTime(); $("#hold-me").moused…

滚动一定的高度底色递增

$(window).scroll(function() {var swipeHeight 200;//完全变色高度var scrollTop $(document).scrollTop();//页面滚动高度var x scrollTop/swipeHeight;$(".head-bg").css({"opacity":x}); }) 转载于:https://www.cnblogs.com/lhj-blog/p/8521525.htm…

@hot热加载修饰器导致static静态属性丢失(已解决)

react开发的时候&#xff0c;引入热加载&#xff0c;用了修饰器的引入方式&#xff0c;发现了一个很有意思的问题&#xff0c;网上并没有相关文章&#xff0c;所以抛出来探讨下。 一段很简单的测试代码。但是经过babel编码后&#xff0c;变得很有意思。假设编码成es2016&#x…

49. 字母异位词分组

49. 字母异位词分组 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的字母得到的一个新单词&#xff0c;所有源单词中的字母都恰好只用一次。 示例 1: 输入: strs [“eat”, “tea”, “tan”…

python 入门程序_非Python程序员的Python速成课程-如何快速入门

python 入门程序This article is for people who already have experience in programming and want to learn Python quickly.本文适用于已经有编程经验并希望快速学习Python的人们。 I created this resource out of frustration when I couldnt find an online course or a…

cmd命令操作Oracle数据库

//注意cmd命令执行的密码字符不能过于复杂 不能带有特殊符号 以免执行不通过 譬如有&#xff01;#&#xffe5;%……&*之类的 所以在Oracle数据库设置密码是不要太复杂 /String Database "ORCL"; 不指向地址程序只能安装在数据库服务器上才能执行到命令String …

OpenCV学习(7.16)

写了个实现摄像头上画线并输出角度的东西……虽然很简单&#xff0c;但脑残的我还是debug了很长时间。 1 // 圆和直线.cpp : 定义控制台应用程序的入口点。2 //3 4 #include "stdafx.h"5 6 using namespace std;7 using namespace cv;8 9 void onMouse(int event, in…

学习vue.js的自我梳理笔记

基本语法格式&#xff1a; <script> new Vue({ el: #app, data: { url: http://www.runoob.com } }) </script> 指令 【指令是带有 v- 前缀的特殊属性。】 判断 <p v-if"seen">现在你看到我了</p> 参数 <a v-bind:href"url"&…

722. 删除注释

722. 删除注释 给一个 C 程序&#xff0c;删除程序中的注释。这个程序source是一个数组&#xff0c;其中source[i]表示第i行源码。 这表示每行源码由\n分隔。 在 C 中有两种注释风格&#xff0c;行内注释和块注释。 字符串// 表示行注释&#xff0c;表示//和其右侧的其余字符…

如何创建一个自记录的Makefile

My new favorite way to completely underuse a Makefile? Creating personalized, per-project repository workflow command aliases that you can check in.我最喜欢的完全没用Makefile的方法&#xff1f; 创建个性化的按项目存储库工作流命令别名&#xff0c;您可以检入。…

【BZOJ3262】陌上花开

CDQ分治模板 注意三元组完全相等的情况 1 #include<bits/stdc.h>2 using namespace std;3 const int N100010,K200010;4 int n,k,cnt[N],ans[N];5 struct Node{6 int a,b,c,id;7 bool operator<(const Node& k)const{8 if(bk.b&&ck.c) re…