CF840D. Destiny

Solution

发现问题只有询问没有修改,且要维护类似众数的东西,瞟了一眼数据范围n,m≤3e5n,m\leq 3e5n,m≤3e5,果断莫队,一点不虚,写到一半发现删除不好直接维护,用setsetset会多一个logloglog,必然TLETLETLE,于是果断回滚莫队,维护所有数的出现次数以及出现次数最多的五个数即可。

时间复杂度:大常数 O(nn)O(n\sqrt n)O(nn​)。
CFCFCF实测1600ms1600ms1600ms,优秀!

Code

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=998244353;
const int MAXN=600005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
int a[MAXN],cnt[MAXN],Ans[MAXN],mx[10],Mx[10];
struct Qnode{ int l,r,x,id; } Q[MAXN];
void add(int x)
{cnt[x]++;for (int j=0;j<5;j++) if (mx[j]==x) return;int mn=0;for (int j=1;j<5;j++) if (cnt[mx[j]]<cnt[mx[mn]]) mn=j;if (cnt[mx[mn]]<cnt[x]) mx[mn]=x;
}
void Add(int x)
{cnt[x]++;for (int j=0;j<5;j++) if (Mx[j]==x) return;int mn=0;for (int j=1;j<5;j++) if (cnt[Mx[j]]<cnt[Mx[mn]]) mn=j;if (cnt[Mx[mn]]<cnt[x]) Mx[mn]=x;
}
int get(int x)
{int ans=INF;for (int j=0;j<5;j++)if (cnt[mx[j]]>=x) upmin(ans,mx[j]);if (ans==INF) return -1;return ans;
}
int Get(int x)
{int ans=INF;for (int j=0;j<5;j++)if (cnt[Mx[j]]>=x) upmin(ans,Mx[j]);if (ans==INF) return -1;return ans;
}
signed main()
{int n=read(),m=read(),sz=floor(sqrt(n));for (int i=1;i<=n;i++) a[i]=read();for (int i=1;i<=m;i++) Q[i]=(Qnode){read(),read(),read(),i};sort(Q+1,Q+m+1,[&](Qnode x,Qnode y){ return ((x.l-1)/sz<(y.l-1)/sz)||((x.l-1)/sz==(y.l-1)/sz&&x.r<y.r); });Q[0].l=-sz;for (int i=1,l,r;i<=m;i++){if ((Q[i].l-1)/sz!=(Q[i-1].l-1)/sz) {for (int j=1;j<=n;j++) cnt[j]=0;for (int j=0;j<5;j++) mx[j]=0;l=((Q[i].l-1)/sz+1)*sz,r=l-1;}if ((Q[i].r-1)/sz==(Q[i].l-1)/sz){for (int j=Q[i].l;j<=Q[i].r;j++) add(a[j]);Ans[Q[i].id]=get((Q[i].r-Q[i].l+1)/Q[i].x+1);for (int j=Q[i].l;j<=Q[i].r;j++) cnt[a[j]]--;continue;}while (r<Q[i].r) r++,add(a[r]);for (int j=0;j<5;j++) Mx[j]=mx[j];for (int j=Q[i].l;j<l;j++) Add(a[j]);Ans[Q[i].id]=Get((Q[i].r-Q[i].l+1)/Q[i].x+1);for (int j=Q[i].l;j<l;j++) cnt[a[j]]--;}for (int i=1;i<=m;i++) printf("%d\n",Ans[i]);return 0;
}

CF840D. Destiny相关推荐

  1. double java 精度丢失_java中double和float精度丢失问题及解决方法

    在讨论两位double数0.2和0.3相加时,毫无疑问他们相加的结果是0.5.但是问题总是如此吗? 下面我们让下面两个doubles数相加,然后看看输出结果: @Test public void te ...

  2. BCVP开发者说第一期:Destiny.Core.Flow

    沉静岁月,淡忘流年 1 项目简介 Destiny.Core.Flow Destiny.Core.Flow是基于.NetCore平台,轻量级的模块化开发框架,Admin管理应用框架,旨在提升团队的快速开 ...

  3. Control your destiny, or someone else will

    6条rules,来自GE 1. Control your destiny, or someone else will. 2. Face reality as it is, not as it was ...

  4. 命运2登录服务器中断,命运2错误代码:与命运断开连接解决步骤Error Codes: Disconnected From Destiny...

    错误代码:与命运断开连接 与命运断开连接的玩家将收到一条错误消息,该消息的底部可能包含错误代码.每个错误代码都表示断开连接的类型不同,并用于帮助Bungie,平台合作伙伴和玩家跟踪导致受影响的玩家失去 ...

  5. Slumdog Millionaire is destiny

    贫民窟的百万富翁,这部影片能够获得奥斯卡金像奖感觉还是有点意外的 并不是非常有故事性的叙事影片,但有几句话是比较震撼人的 把社会的黑暗以素描的方式展现在眼前,每个贫民窟的孩子是那么无能为力,在一个自己 ...

  6. python自动发送微信公众号_使用python一步一步搭建微信公众平台(四)----将小黄鸡引入微信自动回复...

    通过前三篇的教程,相信大家基本上了解了微信开发的基本流程,先判断用户传入数据的类型MsgType,然后再获取用户输入的内容content,再对content进行处理,再返回给用户 现在我们来加点料,在 ...

  7. anki_Anki如何挽救我的工程生涯

    anki by Jeffrey Shek 通过Jeffrey Shek Anki如何挽救我的工程生涯 (How Anki saved my Engineering Career) I was burn ...

  8. hic染色体构想_了解微服务:从构想到起点

    hic染色体构想 by Michael Douglass 迈克尔·道格拉斯(Michael Douglass) 了解微服务:从构想到起点 (Understanding Microservices: F ...

  9. 谈论源码_6,000名自由职业者谈论金​​钱,幸福和对未来的希望

    谈论源码 More than 6,000 US-based freelancers responded to a new in-depth survey. I dug through the data ...

最新文章

  1. 您会让自己的小孩将来从事软件研发吗?
  2. 【ACM】杭电OJ 1106 函数atoi
  3. python如何调用文件进行换位加密_Python换位密码
  4. segment fault
  5. c语言文件指针ab命令,C语言试题,~库(完整版~).doc
  6. 恒压板框过滤实验数据处理_高考化学实验中:那些不常见的【特殊仪器】与装置,难得的资料...
  7. ado.net 操作mysql_ADO.NET操作数据库(一)
  8. bzoj 3396: [Usaco2009 Jan]Total flow 水流(最大流)
  9. Django自定义分页、bottle、Flask
  10. 微服务系统和分布式系统的区别
  11. 台达JAVA_wplsoft下载(台达plc编程软件)
  12. MATLAB/Simulink双馈风机调频模型,风电调频模型,基于三机九节点搭建含双馈风机的电力系统模型
  13. 《软件工程》-软件质量管理
  14. 磊科linux无线网卡驱动安装步骤,磊科nw360无线网卡安装教程(附磊科nw360驱动下载)...
  15. F4驱动WM8978“前奏
  16. 线性回归方程b保留几位小数_简单线性回归分析(python)
  17. 惠普打印机如何取消任务
  18. android清理空间,安卓手机如何清理系统空间
  19. 如何修改CryEngine5.5着色器
  20. Temporal Pyramid Network for Action Recognition(CVPR2020)

热门文章

  1. access 子窗体 鼠标滚动不工作_Python GUI项目实战(五)明细信息窗体的完善
  2. 送什么给女朋友最致命?
  3. 大牛逝世 = 新人上位 = 科学进步?新研究表明确实如此
  4. 数学特级教师:数学除了做题目,我还必须让他们看这些!
  5. 机器学习都需要有哪些数学知识?
  6. 荐书 | 攻克世纪难题,拒绝领取菲尔兹奖的孤独数学天才的一生
  7. 大数据财税与python应用_大数据跟python
  8. python 空指针_Python&CType空指针错误
  9. php curl实现get请求,PHP中使用curl实现Get和Post请求 | 严佳冬
  10. python核心数据类型_Python核心数据类型——列表