数据结构
SSL_kyx
简~介
展开
-
【51nod】3122 小陶的疑惑2
题目思路利用差分思想先将数组变为差分数列,即ci=ai−ai−1c_i=a_i-a_{i-1}ci=ai−ai−1,然后对于两个操作:第xxx个数的值为c1c_1c1到cic_ici的和将区间(x,y)加c,相当于在cxc_xcx加c,并在cy+1c_{y+1}cy+1减c。再用树状数组优化求解。代码#include<iostream>#define ll long longusing namespace std;const int M=200000;ll原创 2022-01-12 16:22:44 · 408 阅读 · 0 评论 -
【51nod】3121 小陶与杠铃片
题目思路求逆序对,边输入边操作,每输入一个数,他前面有多少个比他大的数,答案就加几。用 aia_iai 表示数为 iii 的个数, 那么求 iii 的前面有多少数比它大,就是求ai+1a_{i+1}ai+1到aMAXa_{MAX}aMAX的和,也就是求a1a_1a1到aMAXa_{MAX}aMAX的和 减去a1a_1a1到aia_iai的和这就可以用树状数组维护,O(nlogn)O(nlogn)O(nlogn)。代码#include<iostream>using原创 2022-01-12 15:37:56 · 391 阅读 · 0 评论 -
队列使用方式 queue,deque
队列使用方式普通队列queue基本操作:1.定义 qeque < 类型(如int)> q2.队尾 q.back()3.队首 q.front()4.弹出队首 q.pop()5.将x从队尾插入 q.push(x)6.判断队列是否为空,空则返回1 q.empty()7.返回元素个数 q.size()双端队列deque基本操作:1.定义 deque < 类型(如int)> e2.队尾 e.back()3.队首 e.front()4.弹出队尾 e.pop_ba原创 2021-03-06 09:49:47 · 224 阅读 · 0 评论 -
优先队列(堆)STL 模板
#include<queue>#include<iostream>using namespace std;priority_queue <int> q1; //默认大根堆//小根堆:struct cmp{ bool operator()(int &a,int &b) { return a>b; //'>'从小到大 从大到小改成 '<' }};priority_queue <int,vector&l原创 2021-03-26 21:53:38 · 115 阅读 · 0 评论 -
【SSL_2521】数数 (单调队列)
题目题解跟 假期 一样,求前缀+单调队列代码#include<iostream>#include<deque>using namespace std;long long n,k,a,s[200001],ans=-2147483647;deque<int> e;int main(){ cin>>n>>k; for(int i=1; i<=n; i++) { cin>>a; s[i]=s[i-1]+原创 2021-03-06 10:14:43 · 77 阅读 · 0 评论 -
【洛谷】P1886 滑动窗口 /【模板】单调队列
题目描述有一个长为 nn 的序列 aa,以及一个大小为 kk 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。例如:The array is [1,3,-1,-3,5,3,6,7][1,3,−1,−3,5,3,6,7], and k = 3k=3。输入格式输入一共有两行,第一行有两个正整数 n,kn,k。 第二行 nn 个整数,表示序列 aa输出格式输出共两行,第一行为每次窗口滑动的最小值第二行为每次窗口滑动的最大值输入输出样例输入8 31原创 2021-03-11 15:47:36 · 315 阅读 · 0 评论 -
【SSL_2884】假期(单调队列)
假期题目经过几个月辛勤的工作,FJ决定让奶牛放假。假期可以在1…N天内任意选择一段(需要连续),每一天都有一个享受指数W。但是奶牛的要求非常苛刻,假期不能短于P天,否则奶牛不能得到足够的休息;假期也不能超过Q天,否则奶牛会玩的腻烦。FJ想知道奶牛们能获得的最大享受指数。Input第一行:N,P,Q.第二行:N个数字,中间用一个空格隔开,每个数都在longint范围内。Output一个整数,奶牛们能获得的最大享受指数。Sample Input5 2 4原创 2021-03-06 09:56:11 · 153 阅读 · 0 评论 -
YbtOJ——字典树【例题2】最大异或对
B. 【例题2】最大异或对题目思路两个数不同位越靠前,异或结果越大,将每个二进制数当做一个字符串从高位到低位存入trie,然后对于每个数,在trie中寻找最优解。代码#include<bits/stdc++.h>using namespace std;const int mx=32;long long trie[10000001][2],lt=1,n,m,a[10000001],ans;void in(long long s){ int p=1; for(int i原创 2021-12-11 16:53:53 · 377 阅读 · 0 评论 -
YbtOJ——字典树【例题1】前缀统计
A. 【例题1】前缀统计题目思路字典树的模板题。代码#include<bits/stdc++.h>using namespace std;long long trie[100001][300],lt=1,n,m,end[100001];string s;char ch;void in(string s)//插入字符串{ long long n=s.size(),p=1; for(int i=0;i<n;++i) { int ch=s[i]-'a'; i原创 2021-12-04 11:16:55 · 240 阅读 · 0 评论 -
树状数组 “详” 解
简介树状数组就是一种能在O(log n)内查询或修改的数据结构,它的代码极其简洁,是水题党的好帮手 适合解决单点修改与区间查询。其大概的结构是这样的:其中AAA数组就是我们的树状数组,Ai=1A_i=1Ai=1~ iii之和,即前缀和。val代表数据的权值。思路每次将一个点进行修改时,就将它所对应的树状数组以及它的父节点更新:void update(int x,int y){ for(; x<=n; x+=x&-x) A[x]+=y;}每次查询时,...原创 2021-12-25 15:13:21 · 406 阅读 · 0 评论