博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10.22T2 DSU算法
阅读量:5863 次
发布时间:2019-06-19

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

6029 -- 【2020级互测D8T2】长门有希的记录

 

Description

“——你今天很闲吧”
“啥…”
“两点整全员在车站前集合”
“喂…”
……
——漫无止境的八月
长门有希,作为对有机生命体接触用人型界面,有着各种各样既不科学也不魔法的能力。简单来讲,就是能够像游戏设计者更改游戏资料一样改变现实世界的物体与现象。(据说战斗时所使用的咒语是倒着读的SQL语句233)
在凉宫春日的强烈愿望之下,原本平淡的一个高一暑假变成了漫无止境的八月,作为唯一一个能够在时间的轮回中保持记忆的人型界面,15498次不断轮回带来的是错误与沉重压力的不断积累,有希需要做一些事情来放松自己。
在这段时间中,无聊至极的有希开始记录每一次轮回所做的事情。包括打棒球、烟花大会、钓鱼、墓地试胆、电影首映、海水浴、保龄球、卡拉OK等等(真是丰富啊) 。
现在,有希把这些事情按照发生的顺序抽象为了一个长度为 的序列,把每一个事件用一个 之间的数代替。出于无聊,她开始统计连续的时间段中SOS团做的次数最多的事情。如果有多种事件的出现次数一样,那么取编号最小的一个。她认为这一定程度上能够表示凉宫大团长的喜爱偏好,也许能够得到脱离无尽八月的方法。
长门同学选取区间是有一定的规则的,这些规则能够更好的帮助她分析大家的喜好。即选中的连续时间段不会相交,只有包含和相离这两种可能性。

Input

输入文件共M+3行。
第一行一个整数T,表示当前数据的编号。注意,这不是解题必须的。
第二行行包括两个整数N,M 。
接下来一行 N个数ai ,表示在第 i个时间段SOS 团所做事情的种类。
接下来M行,每行两个数li,ri ,表示询问的时间段。

Output

输出文件共M行,每行一个数,表示第 次询问的时间段中做的次数最多的事情的编号。

Sample Input

1
5 3
1 2 2 1 1
1 5
1 2
3 3

Sample Output

1 1 2 根据题意,显然。(注意[1,2] 中1 和2 出现次数相同,输出 1).

Hint

样例输入2
1
15 8
1 2 3 2 4 4 5 12 9 2 2 2 2 2 15
1 5
2 4
3 3
6 14
10 13
6 9
11 11
15 15
样例输出2:
2
2
3
2
2
4
2
15
 
 
 
DSU算法可以搞一下,实质上还是一个轻重链划分
code:
1 #include
2 #include
3 #include
4 #include
5 #define N 2000005 6 using namespace std; 7 struct node { 8 int u,v; 9 } e[N];10 struct T {11 int x,y,id;12 } q[N];13 stack
p;14 int rd[N],first[N],nxt[N],cnt;15 int n,m;16 void add(int u,int v) {17 e[++cnt].u=u;18 e[cnt].v=v;19 rd[v]++;20 nxt[cnt]=first[u];21 first[u]=cnt;22 }23 bool cmp(const T&a,const T&b) {24 if(a.x==b.x)return a.y>b.y;25 return a.x
max0) {58 max0=num[x];59 id=x;60 } else if(num[x]==max0)id=min(id,x);61 }62 void solve(int x) {63 for(int i=first[x]; i; i=nxt[i]) {64 int v=e[i].v;65 if(v==hson[x])continue;66 solve(v),clear(v);67 }68 if(hson[x]) {69 solve(hson[x]);70 for(int i=q[x].x; i<=q[hson[x]].x-1; i++)insert(a[i]);71 for(int i=q[hson[x]].y+1; i<=q[x].y; i++)insert(a[i]);72 ans[q[x].id]=id;73 } else {74 for(int i=q[x].x; i<=q[x].y; i++)insert(a[i]);75 ans[q[x].id]=id;76 }77 }78 int main() {79 int ty;80 cin>>ty;81 cin>>n>>m;82 for(int i=1; i<=n; i++)cin>>a[i];83 for(int i=1; i<=m; i++) {84 cin>>q[i].x>>q[i].y;85 q[i].id=i;86 }87 sort(q+1,q+m+1,cmp);88 build();89 for(int i=1; i<=m; i++) {90 if(rd[i])continue;91 dfs(i);92 solve(i);93 clear(i);94 }95 for(int i=1; i<=m; i++)cout<
<<"\n";96 return 0;97 }

over

转载于:https://www.cnblogs.com/saionjisekai/p/9832678.html

你可能感兴趣的文章
java执行scp(非安装证书免密码模式)
查看>>
Canvas 3D engine_HTML5动画引擎
查看>>
小tip: 外链地址网站标志图标API应用
查看>>
Linux 内核DMA机制
查看>>
像素级别的多边形碰撞
查看>>
golang json.Marshal interface 踩坑
查看>>
MongoDB常用操作
查看>>
百无一用是杂家
查看>>
bochs配置
查看>>
StaggeredGridView 实现分析--滑动处理(二)计算、移动、回收,以及填充
查看>>
File类操作
查看>>
LCS_最大公共子串查找算法解析
查看>>
什么是java序列化?如何实现java序列化
查看>>
Mysql 数据类型
查看>>
BitMap 内存使用优化
查看>>
Idea 搭建 jfinal + Dubbo ,
查看>>
线程入门——捕获异常
查看>>
git .gitignore
查看>>
Chrome扩展程序之编码&时间戳小工具
查看>>
Elasticsearch 5.x 字段折叠的使用
查看>>