Function---hdu5875(大连网选,区间连续求余)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5875
题意:有n个数,m个查询,每个查询有一个区间[L, R], 求ans, ans = a[L]%a[L+1]%a[L+2]%...%a[R];
方法一:算是暴力吧,只能说数据太水;
用pos[i] = j 表示第 i 个元素后面的一个<= a[i]的下标是 j ;
然后直接跳到当前位置即可,(我感觉如果数中有10e5个严格递减或者严格递增的序列是会TLE吧)但是这个还是过了,我想应该是数据太弱了吧
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define N 100005
#define INF 0x3f3f3f3f
typedef long long LL;
#define Lson r<<1
#define Rson r<<1|1 int n, a[N], pos[N], m; int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i=; i<=n; i++)
scanf("%d", &a[i]); a[] = INF; for(int i=; i<=n; i++)
{
for(int j=i+; j<=n; j++)
{
if(a[j] <= a[i])
{
pos[i] = j;
break;
}
}
}
scanf("%d", &m);
for(int i=; i<=m; i++)
{
int L, R;
scanf("%d %d", &L, &R);
int ans = a[L];
while(ans && pos[L]<=R && L)
{
ans = ans%a[pos[L]];
L = pos[L];
}
printf("%d\n", ans);
}
}
return ;
}
方法二:在每个查询的时候,用线段树查找,当在区间[L, R]中找到第一个<=num的位置即可;
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define N 400005
#define INF 0x3f3f3f3f
typedef long long LL;
#define Lson r<<1
#define Rson r<<1|1 struct node
{
int L, R, Min;
int mid() {return (L+R)/;}
}a[N]; int n, t[N]; void Build(int r, int L, int R)
{
a[r].L = L, a[r].R = R; if(L == R)
{
scanf("%d", &a[r].Min);
t[L] = a[r].Min;
return ;
} Build(Lson, L, a[r].mid());
Build(Rson, a[r].mid()+, R); a[r].Min = min(a[Lson].Min, a[Rson].Min);
} int Query(int r, int L, int R, int num)
{
if(a[r].Min > num)
return n+;
if(a[r].L >= L && a[r].R <= R)
{
if(a[r].L == a[r].R) return a[r].L;
if(a[Lson].Min <= num)
return Query(Lson, L, R, num);
else
return Query(Rson, L, R, num);
}
else
{
if(L <= a[r].mid())
{
int pos = Query(Lson, L, R, num);
if(pos <= R)
return pos;
}
if(R > a[r].mid())
{
int pos = Query(Rson, L, R, num);
if(pos <= R)
return pos;
}
}
return n+;
} int main()
{
int T, m;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n); Build(, , n); scanf("%d", &m); for(int i=; i<=m; i++)
{
int L, R;
scanf("%d %d", &L, &R);
int pos = L, ans = t[L];
while(pos <= R && ans)
{
pos = Query(, pos+, R, ans);
if(pos<=R) ans = ans%t[pos];
}
printf("%d\n", ans);
}
}
return ;
}
/*
15
6
4 6 5 3 2 8
15
1 6
*/
Function---hdu5875(大连网选,区间连续求余)的更多相关文章
- Weak Pair---hud5877大连网选(线段树优化+dfs)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5877 题意:给你一颗树,有n个节点,每个节点都有一个权值v[i]:现在求有多少对(u,v ...
- 2016 大连网赛---Function(单调栈)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5875 Problem Description The shorter, the simpl ...
- ZOJ 2301 / HDU 1199 Color the Ball 离散化+线段树区间连续最大和
题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑.问最后最长的白色区间的起点和终点的位置. 解法:先离散化 ...
- 动态规划-----hdu 1024 (区间连续和)
给定一个长度为n的区间:求m段连续子区间的和 最大值(其中m段子区间互不相交) 思路: dp[i][j]: 前j个元素i个连续区间最大值 (重要 a[j]必须在最后一个区间内) 转移方程:dp[i][ ...
- 2016 大连网赛---Different GCD Subarray Query(GCD离散+树状数组)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5869 Problem Description This is a simple probl ...
- 团 大连网赛 1007 Friends and Enemies
//大连网赛 1007 Friends and Enemies // 思路:思路很棒! // 转化成最大二分图 // 团:点集的子集是个完全图 // 那么朋友圈可以考虑成一个团,原题就转化成用团去覆盖 ...
- 求余区间的求和类问题 离线+线段树 HDU4228
题目大意:给一个数组a,他的顺序是严格的单调增,然后有如下三个操作 ①加入一个val到a数组里面去,加入的位置就是a[i-1]<val<a[i+1] ②删除一个a[i]=val的值 ③查询 ...
- HDU2303(数论)大整数求余+素数筛选
Sample Input 143 10 143 20 667 20 667 30 2573 30 2573 40 0 0 Sample Output GOOD BAD 11 GOOD BAD 23 ...
- 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel
https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...
随机推荐
- cocos2d 中判断CGPoint或者CGSize是否相等
cocos2d 中判断CGPoint是否相等 调用CGPointEqualToPoint(point1, point2) 判断CGSize是否相等 调用CGSizeEqualToSize(size1, ...
- C++ and Java template class and function 模板类和模板函数
在C++和Java的泛式编程中,模板template的使用是必不可少的,但是Java中没有template关键字,所以两者的写法还是有些许区别的,请参见如下代码: Java的模板 // Java pu ...
- CUTE FTP 控制连接已关闭
使用Cute FTP连接FTP站点时,出现上述错误,在另外一台电脑上却可以正常连接. 原因:FTP服务器IP访问规则的限制 解决方法:在ServerU 服务器中进入服务器详细信息配置界面,在IP访问规 ...
- ArcEngine开发异常:无当前记录
使用 IFeatureWorkspace.CreateFeatureClass() 方法,出现异常:无当前记录 百度/谷歌没有找到合适的解决之道. 而是用IFeatureWorkspace.Creat ...
- opengl画圆
通过这个例子可以更加深刻的了解割圆术的原理,明白如何的化曲为直,且看代码: #include <windows.h> //#include <GLUT/glut.h> #inc ...
- java 处理xml格式数据
1.单个xml文件 package lia.meetlucene; import java.io.*; import javax.xml.parsers.DocumentBuilder; import ...
- Hadoop配置文件解析
Hadoop源码解析 2 --- Hadoop配置文件解析 1 Hadoop Configuration简介 Hadoop没有使用java.util.Properties管理配置文件, 也没有使 ...
- ci调用application/views下的css,js,图片资源出现You don't have permission to access CodeIgniter on this server解决
原因是view文件下面有个.htaccess文件,里面写的是 Deny from all //拒绝所有请求 自己本地测试的话,就直接去掉,放到服务器就指定application/views文件 ...
- SqlServer表数据与excel中数据的互相复制
一.SqlServer表数据复制到excel 1.新建查询,用sql语句把表数据读出来 2.然后,选择数据,右键,复制(也可以点击连同标题复制),复制到记事本中(不然会乱码) 3.然后再把记事本的内容 ...
- java字符串练习题