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 ...
随机推荐
- [leetCode][013] Two Sum 2
题目: Given an array of integers that is already sorted in ascending order, find two numbers such that ...
- iOS下json的解析 NSJSONSerialization
- (IBAction)JOSNButtonPressed:(id)sender { NSString *str=[@"http://douban.fm/j/mine/playlist? ...
- for循环下九九乘法表
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Odoo ir value 分析
源代码位置:openerp/addons/base/ir/ir_values.py _columns = { 'name': fields.char('Name', required=True), ' ...
- Leetcode | Valid Sudoku & Sudoku Solver
判断valid,没有更好的方法,只能brute force. class Solution { public: bool isValidSudoku(vector<vector<char& ...
- DNS服务器的配置与应用: BIND9 的安装与配置
3. BIND9 的安装与配置 3.1 bind简介 BIND (Berkeley Internet Name Domain)是Domain Name System (DNS) 协议的一个实现,提供了 ...
- python aes加解密
python AES加密解密 python AES 双向对称加密解密 Python中进行Base64编码和解码 # encoding:utf-8 import base64 from Crypto.C ...
- 用diss 实现 push动画
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { AAAViewController * aaa = [[AAAVie ...
- WordPress工作原理之程序文件执行顺序
在了解WordPress挂载机制时,一直有一个疑惑,到底是WordPress的内核源文件先执行还是主题文件里functions.php文件先执行.为了解决这个问题,想了解WordPress的工作原理, ...
- memcached学习笔记5--socke操作memcached 缓存系统
使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen( ...