【Codeforces 549F】Yura and Developers | 单调栈、启发式合并、二分
题目链接:https://codeforces.com/problemset/problem/549/F
题目大意:
给定一个序列和一个mod值,定义[l,r]
合法当l
到r
的所有元素和减去其中的最大值的结果能够整除mod。问共有多少区间合法。
题目思路:
好像可以直接分治写的.. 不过启发式的思路应该相同
考虑枚举每一个最大值控制的范围,枚举小的一侧的长度,另一侧二分或者主席树求解即可
这个地方的复杂度要记住了:nlogn当且仅当单调栈一侧不相等,一侧相等时
Code:
/*** keep hungry and calm CoolGuang! ***/
#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#include<stdio.h>
#include<queue>
#include<algorithm>
#include<string.h>
#include<iostream>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define d(x) printf("%lld\n",x);
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const ll INF= 1e17;
const ll maxn = 3e5+700;
const int mod= 998244353;
const int up = 1e9;
template<typename T>inline void read(T &a){char c=getchar();T x=0,f=1;while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}a=f*x;}
ll n,m,p;
ll num[maxn],sum[maxn];
ll pre[maxn],suf[maxn];
int st[maxn];
vector<int>v[maxn*10];
int solve(int s,int t,int x){return upper_bound(v[x].begin(),v[x].end(),t) - lower_bound(v[x].begin(),v[x].end(),s);
}
int main(){read(n);read(m);v[0].push_back(0);for(int i=1;i<=n;i++){read(num[i]);sum[i] = sum[i-1] + num[i];v[sum[i]%m].push_back(i);}int s = 0;for(int i=1;i<=n;i++){while(s && num[i]>=num[st[s]]) s--;pre[i] = st[s]+1;st[++s] = i;}st[s = 0] = n+1;for(int i=n;i>=1;i--){while(s && num[i]>num[st[s]]) s--;suf[i] = st[s]-1;st[++s] = i;}ll ans = 0;for(int i=1;i<=n;i++){if(suf[i]-i > i-pre[i]){for(int k=pre[i]-1;k<i;k++){ans += solve(i,suf[i],(sum[k]+num[i])%m);}}else{for(int k=i;k<=suf[i];k++){ans += solve(pre[i]-1,i-1,(sum[k]-num[i])%m);}}}printf("%lld\n",ans-n);return 0;
}/***
8
0 1 1 2 2 3 5 5
10
***/
【Codeforces 549F】Yura and Developers | 单调栈、启发式合并、二分相关推荐
- Looksery Cup 2015 F - Yura and Developers 单调栈+启发式合并
F - Yura and Developers 第一次知道单调栈搞出来的区间也能启发式合并... 你把它想想成一个树的形式, 可以发现确实可以启发式合并. #include<bits/stdc+ ...
- codeforces 549F Yura and Developers(分治、启发式合并)
codeforces 549F Yura and Developers 题意 给定一个数组,问有多少区间满足:去掉最大值之后,和是k的倍数. 题解 分治,对于一个区间,找出最大值之后,分成两个区间. ...
- 【Codeforces549F】Yura and Developers [单调栈][二分]
Yura and Developers Time Limit: 20 Sec Memory Limit: 512 MB Description Input Output Sample Input 4 ...
- ●CodeForces 549F Yura and Developers
题链: http://codeforces.com/problemset/problem/549/F 题解: 分治,链表. 考虑对于一个区间[L,R],其最大值在p位置, 那么答案的贡献就可以分为3部 ...
- Codeforces 549F Yura and Developers
Description 有一个长度为n的数组a,现在要找一个长度至少为2的子段,求出这一子段的和,然后减去最大值,然后对k取余结果为0. 问这样的子段有多少个 题面 Solution 考虑分治,普遍的 ...
- [分治] 51Nod1472 Codeforces #549F. Yura and Developers
分治学傻的我只会无脑分治-- 题意就是求满足 sum≡maxsum \equiv max 的区间.反正就是按套路搞. 注意计数的数组不能每次 clearclear ,要开时间戳. #include&l ...
- CodeForces - 1484E Skyline Photo(dp+单调栈)
题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...
- CodeForces - 1407D Discrete Centrifugal Jumps(单调栈+dp)
题目链接:点击查看 题目大意:给出 n 个大楼的高度记为 h,现在需要从第一个大楼到达第 n 个大楼,问最小步数是多少,只有满足以下条件时才能从 i 移动到 j ,设 i < j: 题目分析:无 ...
- CodeForces - 1313C2 Skyscrapers (hard version)(单调栈+dp/分治)
题目链接:点击查看 题目大意:给出 n 块连续的空地可以建造摩天大楼,政府有规定,每块地最高只能建 a[ i ] 的高度,同时每栋大楼需要满足一个规则,即每栋大楼的两侧不允许同时存在比自己高的大楼,输 ...
最新文章
- nod找不到服务器,node.js – 带有nodejs child_process的ssh,在服务器上找不到命令
- 80%的人都混淆的BI和报表之不同
- 深入理解 Java 泛型擦除机制
- Java多线程之Synchronized和Lock的区别
- 深入理解gradle中的task
- Quartz.net基于数据库的任务调度管理(Only.Jobs)
- MySQL函数笔记_MySQL笔记之数学函数详解
- 【转】JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
- gitlab ci 自动化部署_lt;为什么准备使用GitLab做CICD流水线?/gt;
- 《101 Windows Phone 7 Apps》读书笔记-TODO LIST
- 微信公众平台 微信网页授权
- 在Office 2013(64bit)下破解VBA工程密码
- Kata Containers及相关vmm介绍
- android 7 评测,iQOO 7 评测:性能出众,操控全面升级的横屏旗舰
- 朋友间相处的七项法则
- python笔记更新(正则表达式)
- Android:Fragment生命周期(结合Activity的生命周期进行分析)
- 基于 LSTM-Attention 的中文新闻文本分类
- 【MacOS 配置网络访问公司内网】
- Delphi中BPL包的使用,个人经验
热门文章
- 线性方程组(五)- 线性方程组的解集
- blackjack算法java_[CareerCup] 8.1 Implement Blackjack 实现21点纸牌
- Android支付接入(七):Googlenbsp;In-app-Billing
- (Model-Contrastive Federated Learning)模型对比联邦学习
- Java实现QQ第三方登录
- 漫谈深度学习时代点击率预估技术进展
- 四、TCP中的流量控制和拥塞控制
- 实习随笔3( 辗转,终到,这一天)
- python怎么设置窗口大小_python – 如何找出所需的窗口大小?
- 集成电路设计学习笔记(二)基于IC617反相器设计之原理图绘制