自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 资源 (1)
  • 收藏
  • 关注

原创 1547:区间和 (线段树模板)

【输入样例】10 200 1 101 1 40 6 61 4 101 8 91 4 90 10 21 1 80 2 101 3 90 7 80 3 100 1 11 3 81 6 90 5 51 1 80 4 21 2 80 1 1【输出样例】1060616624145041const int N=1e5+5; int n,m,t; int i,j,k; ll sum[N*4];void b...

2020-07-31 23:12:22 336

原创 B. Little Elephant and Array(莫队模板)

#include<iostream>#include<cstdio>#include<cstdlib>#include<string>#include<cstring>#include<cmath>#include<ctime>#include<algorithm>#include<utility>#include<stack>#include<queue...

2020-07-31 22:42:53 222

原创 D. Balanced Playlist(单调队列)

题意:给定 n 首歌,第 i 首的值为 a[i],听完第 n 首会回到第 1 首现在遍历 i 开始,记录听歌的最大值 a[i],如果将要听的值严格小于最大值的一半则停止,求最多听几首停止,不会停止则输出-1根据样例 2,可知个单循环不超过三遍,维护一个单调递减队列,当 a[i]<q[head]/2 时,记录队首听歌的数量,当 a[i]>q[tail] 时,队尾 pop,但队尾也需要记录答案,假设队尾是 a[i-1],那么 a[i-1]<a[i] ,那么 ans[i-1]=..

2020-07-31 21:16:27 359

原创 C2. Skyscrapers (hard version)(单调栈)

将给出的 n 个数变成一个开口向下的二次函数,要求每个数 a[i] 修改后不可以超过原来的数,并且 最大首先对于每个数 a[i] ,若 a[i]>=a[i-1] ,那么 a[i] 可能是顶点,若 a[i]<a[i-1] 我们可以将 a[i-1] 及之前大于 a[i] 的值变为 a[i]使得 a[i] 仍为顶点在此开一个前缀和与后缀和数组const int N=5e5+5; int n,m,t; int i,j,k; int a[N...

2020-07-31 21:14:37 346

原创 B. Luxurious Houses

每个数 a[i] 加多少比他右边的所有数都严格大const int N=2e5+5; int n,m,t; int i,j,k; int a[N]; vector<int> ans;int main(){ IOS; for(;cin>>n;){ for(i=1;i<=n;i++) cin>>a[i]; int maxx=-1; for(i=n;i;i..

2020-07-31 21:12:04 222

原创 A. Points on Line(单调队列)

有 n 个点,递增输入,任选三个点,不超过 d,问有多少种选择直接构造单调递增队列,有点尺取的意思,对于最后加入队尾的元素 a[i],队内满足任意两元素 和 a[i] 满足对应条件,所以答案记为, n 为不加入 a[i] 的队列长度const int N=2e5+5; int n,m,t; int i,j,k; deque<int> d; int a[N];int main(){ IOS; while(cin&g...

2020-07-31 21:08:52 303

原创 暑假日记

到现在为止线段树我仍然没有系统的复习一遍,今日份的暑假练习从 CF 开始,不过今天对树状数组和单调栈有了更深刻的了解,昨天晚上,树状数组反向建树的操作现在想起来还是有些玄幻,不过要求区间的最大值,其实线段树更能够解决此类问题,树状数组只是求 [1,x] 区间内的值,当然在题目要求每次求所有元素内的最值的时候,树状数组还是很好用的,今天遇到了一个这样的问题,还傻啦吧唧的用贪心做。现在差不多知道了什么时候利用单调栈了,果然看的题解多了总会找到规律利用单调栈对于 a[i] 相当于从 i 位置向左或向右遍历

2020-07-31 20:09:20 99

原创 C. Fountains(最大值树状数组)

有 n 个泉水,c 枚金币,d 枚钻石,每个泉水可以带来 b 点欢乐值,但要消耗 p 枚金币或钻石,只能买两座泉水,问最大的快乐值这个题明显贪心啊如果两种泉水各买一座还好,但是有可能一种泉水买两坐,剩下的一种不买,所以利用树状数组求区间最大值const int N=2e5+5; int n,m,t; int i,j,k; int c[N],d[N]; int get_max(int x,int *aim)//1~x 的最大值{ int...

2020-07-31 14:06:17 292

原创 P1198 [JSOI2008]最大数(树状数组反向建树)

const int N=2e5+5; int n,m,t; int i,j,k; ll c[N];ll query(int x){ ll ans=1<<31; while(x){ ans=max(ans,c[x]); x-=lowbit(x); } return ans;}void add(int x,ll val){ val%=m; while(x<=n)...

2020-07-30 23:08:04 226

原创 暑假日记

本来今天打算主要练习一下线段树的,中午看了下线段树的基本操作,但对单调栈和单调队列还是不大放心这次遇到了一个维护栈顶是最大值的单调栈如图,维护一个栈顶最大的栈一直到 4 都只有入栈操作,a[5] 想入栈时,a[2],a[3],a[4] 都要出栈此时栈顶为 a[1],a[5] 准备入栈,此时可以进行的操作有 统计 sum[2~5]即 sum[5]-sum[s.top()]但在出栈过程中依然有,sum[4],sum[3~4],sum[2~4] 中不包括栈顶的求解过程当时的栈顶..

2020-07-30 17:29:39 102

原创 P2422 良好的感觉(单调栈)

这个暴力求解完全可以过,枚举每一个点作为最小值,向左向右枚举即可,当所有元素相同时,算法复杂度最高,O(n*n)const int N=1e5+5; int n,m,t; int i,j,k; ll a[N]; stack<int> s; ll dp[N];int main(){ //IOS; while(sd(n)==1){ for(i=1;i<=n;i++) sll(a[i]); ...

2020-07-30 16:58:20 391

原创 P1714 切蛋糕(前缀和+单调队列)

这个题如果能够考虑到应用前缀和,不难想到 sum[i]-sum[j] = ans 的最大值,其中 i-j+1<=m对于每一个 i ,即 sum[i] 是固定的,只要求 sum[j] 的最小值,其中 i-j+1<=m在一个特定的区间求最大值最小值,应用单调队列这个题只需要构造一个单调递减队列即可const int N=2e6+5; int n,m,t; int i,j,k; ll a[N]; deque<int> d; ...

2020-07-30 09:07:43 380

原创 暑假日记

真是燥热的一天,今天做了几道单调队列的题,其中有个题还蛮有成就感的,用 DP 的方法暴力求解,以及超时样例的分析,最后用单调队列优化,虽然最后的优化方式还是不大熟练,但是也总结出了几个利用单调队列的场景,就比如在线性动态规划中,dp[i]由 多个 dp[j] (j在某一区间内),这个时候可以结合滑动窗口那个题,利用单调队列,求出区间内的最值至于单调队列,比如单调递减队列,使得队尾最小化,意思是队尾元素只要大于新插入元素,就要 pop队首元素,根据题目所给的判断条件,移除范围for(i=1;i&

2020-07-29 22:08:09 169

原创 P2629 好消息,坏消息(前缀和+单调队列)

其实这个题还是求一个区间维护一个单调递减序列

2020-07-29 21:51:38 435

原创 P1725 琪露诺(DP+单调队列)

首先这个题肯定应用动态规划根据题意,方程为 dp[i]=max(dp[i],dp[j]+a[i]) (j+[l,r]=i)然后答案分布在 dp[i] i ∈[n+1,n+r] 之间好了,这个题就解决了时间复杂度最坏为: O(N*(R-l)),即 O(N^2)超时肯定的了超时代码:const int N=5e5+5; int n,m,t; int i,j,k; int dp[N]; int a[N];int main(){ ..

2020-07-29 11:38:37 272

原创 P1823 [COI2007] Patrik 音乐会的等待(单调栈)

维护一个单调栈,使得栈顶元素最小,比如:a[1]=6,a[2]=5,a[3]=2,a[4]=6此时 a[1],a[2],a[3] 逐步进栈,有两对可以交谈a[4] 进栈时,可以与 a[1] 交谈,假设后面还有元素 a[5]a[5]>=a[4] 那么仍然只与 a[1] a[4] 交谈a[5] <a[4] 那么 a[5] 处于队尾无法与任何人交谈但题目比较特殊,需要特殊处理栈顶相同的元素,并记录个数超时代码:const int N=5e5+5; ...

2020-07-29 09:17:10 222

原创 暑假日记

又是数据结构的一天,上午回顾了一下树状数组,因为没吃早饭的缘故,总结不出什么东西,做题的时候一愣一愣的,找不出题目的切入点在哪里,在什么时候需要树状数组,明天还要再看一下那部分内容。下午刷了刷单调队列的题,现在能记住的使用场景好像只有求区间的最大最小值,在刷题的最后,遇到了单调栈,找了几篇博客,大致有个了解,单调栈和单调队列有很多相似的地方,比如他们都要存储单调的序列,同时也有不同点,单调队列队尾队首都可以进行 pop 操作,但是单调栈只能对栈顶 pop 操作...

2020-07-28 19:07:08 101

原创 P1901 发射站(单调栈)

假设当前有 a[1]=7 a[2]=5 a[3]=4 三个发射塔,现在在后面加一个发射塔,高度为 a[4]=6a[4] 要接受 a[3],a[2]这两个发射塔的信号,以及将自身的信号发射给 a[1]很明显利用单调栈,将 a[3] 出栈,再将 a[2] 出栈,最后栈内只剩下 a[1] , a[4]最后统计每一个位置处的能量即可const int N=2e6+5; int n,m,t; int i,j,k; ll h[N],v[N]; stack...

2020-07-28 16:03:57 402

原创 P1638 逛画展(尺取)

const int N=2e6+5; int n,m,t; int i,j,k; map<int,int> mp; int a[N];int main(){ //IOS; while(sdd(n,m)==2){ for(i=1;i<=n;i++){ sd(a[i]); } int num=0,l=1,r=n; int len=n; //记...

2020-07-28 14:49:12 394

原创 洛谷 P2032 扫描(单调队列)

const int N=2e6+5; int n,m,t; int i,j,k; int a[N]; int q[N]; int id[N];void get_max()//单调递减序列{ int head=1,tail=0; for(i=1;i<k;i++){ while(tail>=head && q[tail]<=a[i]) tail--; tail++; ...

2020-07-28 13:58:34 253 1

原创 P1886 滑动窗口(单调队列)

我们以求最大值为例,构造一个单调递减的序列,我们要求队尾尽量大,假设 ai<aj && i<j,那么 aj 能放到队列尾部,因为此队列队首元素为我们要求的最大值,区间再向右移动时,永远不可能是 ai 的值,换句话说,aj 的持续时间比 ai 强,且更有可能成为最大值const int N=1e6+5; int n,m,t; int i,j,k; int a[N]; int q[N]; int id[N];void...

2020-07-28 11:42:25 232

原创 P5367 【模板】康托展开(树状数组)

关于康托展开,假设有一个长度为 n 的序列{a1,a2,a3,……an},比它字典序小的排列有种,其中 表示在序列中 ai 后面有几个比 ai 小的数例如:之后要解决的就是快速求利用树状数组快速求出前缀和的特点,还是序列{2,4,1,5,3}首先树状数组置为 1,相当于未访问过,当元素被访问时,置为 0当 2 被访问时,求前缀和为 1(不包括自己),随后 2 被置为 0当 4 被访问时,求前缀和为 2(不包括自己和 2 ),随后 4 被置为 0思路来自:洛谷...

2020-07-28 10:17:45 373

原创 P1168 中位数(vector 实现 set)

int n,m,t; int i,j,k; vector<int> v;int main(){ //IOS; while(sd(n)==1){ for(i=1;i<=n;i++){ int x; sd(x); v.insert(upper_bound(v.begin(),v.end(),x),x); if(i&1) p...

2020-07-27 22:48:02 365

原创 P4392 [BOI2007]Sound 静音问题(树状数组+区间最值)

const int N=1e6+5; int n,m,t; int i,j,k; //Pair c[N]; //fr->max,sc->min int a[N]; vector<int> ans; struct Tree { int fr=-inf; int sc=inf; }c[N];int lowbit(int x){ return x&(-x); }void...

2020-07-27 22:25:19 217

原创 暑假日记

从今天开始复习一下几个数据结构,由于线段树码量太大,暂时计划用三天熟悉一下树状数组与单调队列,之前都学过,但是没有好好的实践,昨晚预热了一下树状数组,上午对着几个博客又重新熟悉了一下,结果电脑坏了……数据结构一开始就不顺,有点慌,照着信奥看了几道例题,感觉就是按照题意修改模板,下午修好了电脑之后,看了看几道洛谷的题,这……好吧,又回去看了遍博客现在对于树状数组的理解就是用数组利用二进制的性质进行一种特殊的存储方式,根节点包含自己与自己的子节点可以高效的求解区间和,区间最值其中对 区间 [l,

2020-07-27 21:00:05 104

原创 1535:数列操作

const int N=1e5+5; int n,m,t; int i,j,k; int c[N];void update(int pos,int val){ while(pos<=n){ c[pos]+=val; pos+=lowbit(pos); }}int get_sum(int x)//第 1 个数到第 x 个数{ int ans=0; while(x){ ans+=...

2020-07-26 21:55:19 392

原创 裴蜀定理 && 扩展欧几里得算法求逆元详解

裴蜀定理 :有一个线性不定方程ax+by=c若此方程有解,那么 c=k*gcd(a,b) ,k 为任意正整数证明:以下 gcd(a,b) 简称 gcd(ax+by) mod gcd=0又 c mod gcd=0(ax+by-c) mod gcd=0ax+byc(mod gcd)证毕当 ax+by=c 成立时,c=k*gcd特殊的:当 a,b 互质时,方程满足 ax+by=1扩展欧几里得算法:如何求解上述方程:因为涉及...

2020-07-25 16:09:44 2330

原创 POJ 2800 && UVa 1363 Joseph‘s Problem(分块求余)

给出 n,k 求 (k mod i)

2020-07-25 15:01:45 154

原创 Codeforces Round #659 (Div. 2)

Codeforces Round #659 (Div. 2)Common Prefixes(构造)给出 n 个数 a[i],输出 n+1 行,使得 第 i 行与第 i+1 行有 a[i] 个相同的字母const int N=100+5; int n,m,t; int i,j,k; int a[N];void go(){ for(i=1;i<=n+1;i++){ if(i&1) cout<<'a'; ...

2020-07-25 11:24:37 417 1

原创 Educational Codeforces Round 72 (Rated for Div. 2)

Educational Codeforces Round 72 (Rated for Div. 2) int main(){ IOS; rush(){ ll a,b,c; cin>>a>>b>>c; a+=c; ll ans=min(c,a-1-b>>1 ); if(a>b) ans++; if(ans...

2020-07-24 16:10:23 181

原创 Codeforces Round #582 (Div. 3)

Codeforces Round #582 (Div. 3) int n,m,t; int i,j,k;int main(){ IOS; while(cin>>n){ int odd=0,even=0; for(i=1;i<=n;i++){ int x; cin>>x; if(x&1) odd++; e...

2020-07-24 14:37:58 179

原创 Codeforces Round #587 (Div. 3)

const int N=3e5+5; int n,m,t; int i,j,k; char a[N];int main(){ IOS; while(cin>>n){ cin>>a+1; int ans=0; for(i=2;i<=n;i+=2){ if(a[i]!=a[i-1]) continue; if(a[i]=='a') a[.

2020-07-23 16:06:22 190

原创 Educational Codeforces Round 73 (Rated for Div. 2)

const int N=3e5+5; int n,m,t; int i,j,k; Pair p[N]; map<int,int> mp; ll dp[N][3];int main(){ //IOS; rush(){ sd(n); mp.clear(); for(i=1;i<=n;i++){ sd(p[i].fr); sd(p[i.

2020-07-23 14:56:14 221 1

原创 POJ 3641 Pseudoprime numbers

如果 p 不是素数,且,则 p 称为伪素数,给出 p,a,判断 p 是否为伪素数 int n,m,t; int i,j,k;bool judge(int n){ for(int i=2;i*i<=n;i++){ if(n%i==0) return 0; } return 1;}int pow_mod(ll a,ll index,ll mod){ ll ans=1; while(index){ ...

2020-07-22 11:16:09 163

原创 POJ 2478 Farey Sequence(欧拉函数)

求 1~n 内与 n 互质的个数,phi[1]=0const int N=1e6+5; int n,m,t; int i,j,k; int phi[N];void get_eular(){ for(i=0;i<N;i++) phi[i]=i; phi[1]=0; for(i=2;i<N;i++){ if(phi[i]==i){ for(j=i;j<N;j+=i){ ...

2020-07-22 10:44:47 156

原创 Codeforces Round #658 (Div. 2)

有字符串 a,b,每次操作可以将字符串 a 的前缀反转例如:01111001,反转 3,前三个字符 011 -> 100 -> 001(0changes to1and1changes to0and reverse the order of the bits in the prefix.)求多少次可以将 a 变为 b,不超过 2*n 次,n 为字符串长度可以将字符串变为由一个字符构成遍历字符串,当 a[i] != a[i+1] 时,操作前缀 i,,...

2020-07-22 09:57:30 232

原创 UVa 10006 Carmichael Numbers (快速幂)

给出一个合数 n ,如果对于任意数 a 都有 (2<=a<=n-1) a^n mod n =a ,则称 n 是一个卡迈克尔数.给出一整数n,判断其是否是卡迈克尔数如果数 n 本身为质数,即使通过费马测试也不是卡迈尔数 int n,m,t; int i,j,k;ll pow_mod(ll a,ll x,ll mod){ ll ans=1; while(x){ if(x&1) ans=ans*a%mod;...

2020-07-21 22:35:19 208

原创 HDU 1286 找新朋友(欧拉函数裸题)

int Eular(int n){ int ans=n; for(i=2;i*i<=n;i++){ if(n%i==0){ ans=ans/i*(i-1); while(n%i==0) n/=i; } } if(n>1) ans=ans/n*(n-1); return ans;}int main(){ //IOS; rush(){ ...

2020-07-21 21:19:02 300

原创 Codeforces Round #590 (Div. 3)

Equalize Prices Again有 n 件商品的价格,现在老板想让所有的商品的价格都一样,并且总价格尽量接近之前的价格,但要 >= 之前的价格int main(){ IOS; rush() { cin>>n; double sum=0,x; for(i=0;i<n;i++) cin>>x,sum+=x; cout<<int(ceil(sum/..

2020-07-21 11:25:55 189

原创 Educational Codeforces Round 74 (Rated for Div. 2)

int main(){ IOS; rush(){ ll x,y; cin>>x>>y; ll res=x-y; if(res==1) cout<<"NO"<<endl; else cout<<"YES"<<endl; } //PAUSE;}const int N=1e5+5; int n,m,t;.

2020-07-20 23:16:42 256

codeblocks17.12安装包.zip

适合新手使用的编译器,之后更新 百度网盘安装包: 链接:https://pan.baidu.com/s/1M1PGcirlC0He1WjOFrw8gQ 提取码:jfq5

2020-07-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除