博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Looksery Cup 2015 F - Yura and Developers 单调栈+启发式合并
阅读量:5208 次
发布时间:2019-06-14

本文共 1690 字,大约阅读时间需要 5 分钟。

第一次知道单调栈搞出来的区间也能启发式合并。。。

你把它想想成一个树的形式, 可以发现确实可以启发式合并。

#include
#define LL long long#define fi first#define se second#define mk make_pair#define PII pair
#define PLI pair
#define ull unsigned long longusing namespace std;const int N = 3e5 + 7;const int inf = 0x3f3f3f3f;const LL INF = 0x3f3f3f3f3f3f3f3f;const int mod = 1e9 + 7;const double eps = 1e-8;int n, k, tot, a[N], stk[N], L[N], R[N], sum[N];vector
num[1000007];void add(int &a, int b) { a += b; if(a >= mod) a -= mod;}int cal(int x, int l, int r) { auto it1 = upper_bound(num[x].begin(), num[x].end(), r); auto it2 = lower_bound(num[x].begin(), num[x].end(), l); return it1 - it2;}int main() { scanf("%d%d", &n, &k); num[0].push_back(0); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); sum[i] = (sum[i-1]+a[i]%k)%k; num[sum[i]].push_back(i); } a[0] = a[n+1] = inf; stk[++tot] = 0; for(int i = 1; i <= n; i++) { while(tot && a[stk[tot]] < a[i]) tot--; L[i] = stk[tot]; stk[++tot] = i; } tot = 0; stk[++tot] = n+1; for(int i = n; i >= 1; i--) { while(tot && a[stk[tot]] <= a[i]) tot--; R[i] = stk[tot]; stk[++tot] = i; } LL ans = 0; for(int i = 1; i <= n; i++) { if(i - L[i] < R[i] - i) { for(int j = L[i]; j < i; j++) ans += cal((sum[j]+a[i])%k, i, R[i]-1); } else { for(int j = i; j < R[i]; j++) { ans += cal((sum[j]-(a[i]%k)+k)%k, L[i], i-1); } } } printf("%lld\n", ans - n); return 0;}/**/

 

转载于:https://www.cnblogs.com/CJLHY/p/9916153.html

你可能感兴趣的文章
用Monitor简单3步监控中间件ActiveMQ
查看>>
ANDROID_MARS学习笔记_S01原始版_018_SERVICE之Parcel
查看>>
迅为iTOP-4418开发板兼容八核6818开发板介绍
查看>>
com.fasterxml.jackson.databind.JsonMappingException
查看>>
【UVa 540】Team Queue
查看>>
Advanced Architecture for ASP.NET Core Web API
查看>>
排序算法(二)
查看>>
4.4 多线程进阶篇<下>(NSOperation)
查看>>
如何更改Android的默认虚拟机地址(Android virtual driver路径设置)
查看>>
Python内置函数(36)——iter
查看>>
事件双向绑定原理
查看>>
HTML标签_1
查看>>
[Angular] @ViewChildren and QueryLists (ngAfterViewInit)
查看>>
jsp组成元素
查看>>
排序算法(转)
查看>>
windows自带的可生成各种数据库连接字符串工具打开方法
查看>>
Linux查看系统开机时间(转)
查看>>
form表单中method的get和post区别
查看>>
【做题】arc068_f-Solitaire——糊结论
查看>>
Poj 1094 拓扑排序 水题
查看>>