HDU 4638Group (莫队)
Group
Problem Description
There are n men ,every man has an ID(1..n).their ID is unique. Whose ID is i and i-1 are friends, Whose ID is i and i+1 are friends. These n men stand in line. Now we select an interval of men to make some group. K men in a group can create K*K value. The value of an interval is sum of these value of groups. The people of same group's id must be continuous. Now we chose an interval of men and want to know there should be how many groups so the value of interval is max.
Input
First line is T indicate the case number.
For each case first line is n, m(1<=n ,m<=100000) indicate there are n men and m query.
Then a line have n number indicate the ID of men from left to right.
Next m line each line has two number L,R(1<=L<=R<=n),mean we want to know the answer of [L,R].
Output
For every query output a number indicate there should be how many group so that the sum of value is max.
Sample Input
1
5 2
3 1 2 5 4
1 5
2 4
Sample Output
1
2
题目大意:
多组数据
给出n和m,a[i]为1到n的不重复数
询问m次
问一段区间内,连续的一段可分为一组(可以打乱顺序),问至少分多少组,
莫队板子题。
这里纠正一下莫队细节
先加再删,不要先删再加
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#define maxn 100100
using namespace std;
int n,m,zz,k;
int a[maxn];
int belong[maxn];
int vis[maxn];
int ans;
inline int read()
{
int x=0,f=1;char s=getchar();
while('0'>s||s>'9') {
if(s=='-') f=-1;
s=getchar();
}
while('0'<=s&&s<='9') {
x=x*10+s-'0';
s=getchar();
}
return x*f;
}
struct edge {
int x,y,id;
int ans;
bool operator < (const edge &a) const {
return belong[x]==belong[a.x] ? y<a.y : x<a.x;
}
} q[maxn];
inline int cmp(const edge &a,const edge &b) {
return a.id<b.id;
}
inline void Add(int x) {
int dsr=vis[x+1]+vis[x-1];
dsr==0 ? ++ans : dsr==2?--ans:ans;
++vis[x];
}
inline void Delet(int x) {
int dsr=vis[x+1]+vis[x-1];
dsr==0? --ans : dsr==2?++ans:ans;
--vis[x];
}
int main() {
zz=read();
while(zz--) {
memset(a,0,sizeof(a));
memset(belong,0,sizeof(belong));
memset(q,0,sizeof(q));
memset(vis,0,sizeof(vis));
ans=0;
n=read();
m=read();
k=sqrt(n);
for(int i=1; i<=n; ++i) {
a[i]=read();
belong[i]=(i-1)/k+1;
}
for(int i=1,x,y; i<=m; ++i) {
q[i].x=read();
q[i].y=read();
q[i].id=i;
}
sort(q+1,q+1+m);
for(register int i=1,l=1,r=0; i<=m; ++i) {
register int x=q[i].x,y=q[i].y;
while(r < y) Add(a[++r]);
while(r > y) Delet(a[r--]);
while(l < x) Delet(a[l++]);
while(l > x) Add(a[--l]);
q[i].ans=ans;
}
sort(q+1,q+1+m,cmp);
for(int i=1; i<=m; ++i)
printf("%d\n",q[i].ans);
}
return 0;
}
HDU 4638Group (莫队)的更多相关文章
- Hdu 5213-Lucky 莫队,容斥原理,分块
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5213 Lucky Time Limit: 6000/3000 MS (Java/Others) Me ...
- Harvest of Apples (HDU多校第四场 B) (HDU 6333 ) 莫队 + 组合数 + 逆元
题意大致是有n个苹果,问你最多拿走m个苹果有多少种拿法.题目非常简单,就是求C(n,0)+...+C(n,m)的组合数的和,但是询问足足有1e5个,然后n,m都是1e5的范围,直接暴力的话肯定时间炸到 ...
- HDU 4358 莫队算法+dfs序+离散化
Boring counting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 98304/98304 K (Java/Others)T ...
- HDU 4638 (莫队)
题目链接:Problem - 4638 做了两天莫队和分块,留个模板吧. 当插入r的时候,设arr[r]代表r的位置的数字,判断vis[arr[r-1]]和vis[arr[r+1]]是否访问过,如果两 ...
- HDU 4638 莫队算法
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 5145(莫队算法+逆元)
NPY and girls Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- HDU 6333 莫队+组合数
Problem B. Harvest of Apples Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K ...
- HDU 6534 莫队+ 树状数组
题意及思路:https://blog.csdn.net/tianyizhicheng/article/details/90369491 代码: #include <bits/stdc++.h&g ...
- HDU 5145 NPY and girls (莫队分块离线)
题目地址:HDU 5145 莫队真的好奇妙.. 这种复杂度竟然仅仅有n*sqrt(n)... 裸的莫队分块,先离线.然后按左端点分块,按块数作为第一关键字排序.然后按r值作为第二关键字进行排序. 都是 ...
随机推荐
- Spark-Cache与Checkpoint
一.Cache缓存操作 scala> val rdd1 = sc.textFile("hdfs://192.168.146.111:9000/logs") rdd1: org ...
- Kubernetes网络的4种解决方案
一.Kubernetes + Flannel Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的 ...
- Linux新建用户 useradd&groupadd
建立一个新组,并设置组ID加入系统:#groupadd -g 1000 sparkgroup #useradd -u 2000 -g sparkgroup sparkuser #mkdir -p /a ...
- 【JMeter】如何优雅的写脚本
cc给发的视频链接: http://v.youku.com/v_show/id_XMzA4Mjg1ODA0MA==.html?spm=a2h3j.8428770.3416059.1 ————————— ...
- cookie和session的使用
http://www.cnblogs.com/linguoguo/p/5106618.html 1:在控制器中添加session和cookie @RequestMapping("/getin ...
- 【Cocos2dx 3.3 Lua】触屏事件
cocos2dx 3.x触屏时间分为单点触摸和多点触摸: 单点触摸:(即只有注册的Layer才能接收触摸事件) 多点触摸点单用法(多个Layer获取屏幕事件): ...
- CNN实现垃圾邮件分类(行大小不一致要补全)
以下是利用卷积神经网络对某一个句子的处理结构图 我们从上图可知,将一句话转化成一个矩阵.我们看到该句话有6个单词和一个标点符号,所以我们可以将该矩阵设置为7行,对于列的话每个单词可以用什么样的数值表示 ...
- 自实现jQuery版分页插件
本篇博客的分页插件是在2017-11-10 的一篇博客的基础上改造的(原博客地址:原生js版分页插件),主要是优化了分页按钮的排列和显示样式,取消首页和末页的箭头按钮,改为数字按钮,并始终把它们分别固 ...
- php深入学习
关于PHP程序员解决问题的能力 http://rango.swoole.com/archives/340 深入理解PHP内核 by xuhong大牛 http://www.php-internals. ...
- <A Decomposable Attention Model for Natural Language Inference>(自然语言推理)
http://www.xue63.com/toutiaojy/20180327G0DXP000.html 本文提出一种简单的自然语言推理任务下的神经网络结构,利用注意力机制(Attention Mec ...