2016 ACM-ICPC Asia Regional Dalian Online HDU 5875 Function(线段树)
题意
求区间l~r的a[l]%a[l+1]%……%a[r]的值
思路
因为取模的变化是很快的,所以线段树查找区间内第一个小于等于a[l]的数的位置,更新ans后继续查找即可。
注意查询满足某种条件的位置要这样写:
int query(int L,int R,int l,int r,int rt,int x)
{
if(mi[rt]>x) return inf;
if(l>R||r<L) return inf;
if(lr) return l;
int m=(l+r)>>1;
int ans=inf;
ans=min(ans,query(L,R,l,m,rt<<1,x));
if(ansinf)
ans=min(ans,query(L,R,m+1,r,rt<<1|1,x));
return ans;
}
代码
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=1e5+5;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int mi[N<<2],add[N<<2];
int a[N],n;
void pushUp(int rt)
{
    mi[rt]=min(mi[rt<<1],mi[rt<<1|1]);
}
void build(int l,int r,int rt)
{
    if(l==r)
    {
        mi[rt]=a[l];
        return;
    }
    int m=(l+r)>>1;
    build(l,m,rt<<1);
    build(m+1,r,rt<<1|1);
    pushUp(rt);
}
int query(int L,int R,int l,int r,int rt,int x)
{
    // cout<<"gg"<<endl;
    if(mi[rt]>x) return inf;
    if(l>R||r<L) return inf;
    if(l==r) return l;
    int m=(l+r)>>1;
    int ans=inf;
    ans=min(ans,query(L,R,l,m,rt<<1,x));
    if(ans==inf)
        ans=min(ans,query(L,R,m+1,r,rt<<1|1,x));
    return ans;
}
int main()
{
    int n;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
        }
        build(1,n,1);
        int q;
        scanf("%d",&q);
        while(q--)
        {
            int l,r;
            scanf("%d%d",&l,&r);
            int ans=a[l];
            while(l<=r)
            {
                int pos=query(l+1,r,1,n,1,ans);
                if(pos==inf)
                {
                    break;
                }
                ans%=a[pos];
                if(ans==0)
                    break;
                l=pos;
                //   cout<<pos<<endl;
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}
2016 ACM-ICPC Asia Regional Dalian Online HDU 5875 Function(线段树)的更多相关文章
- 2016 ACM/ICPC Asia Regional Dalian Online HDU 5877  Weak Pair  treap + dfs序
		Weak Pair Problem Description You are given a rooted tree of N nodes, labeled from 1 to N. To the ... 
- HDU 5874 Friends and Enemies 【构造】 (2016 ACM/ICPC Asia Regional Dalian Online)
		Friends and Enemies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ... 
- HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)
		Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ... 
- HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)
		Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ... 
- HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)
		Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ... 
- 2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869
		Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ... 
- 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873
		Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ... 
- hdu 5868   2016 ACM/ICPC Asia Regional Dalian Online 1001 (burnside引理 polya定理)
		Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K ... 
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
		Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ... 
- HDU 5875 Function 2016 ACM/ICPC Asia Regional Dalian Online
		N个数(N<=100000),M个询问,每次询问L,R,求F(L,R). F(L,R)=F(L,R-1)%A[R] , L<R 这道题数据比较鶸 可以直接用递减爆 正确做法应该是倍增 用倍 ... 
随机推荐
- lstm和gru详解
			一.LSTM(长短期记忆网络) LSTM是一种特殊的RNN类型,一般的RNN结构如下图所示,是一种将以往学习的结果应用到当前学习的模型,但是这种一般的RNN存在着许多的弊端.举个例子,如果我们要预测“ ... 
- win10打印所有进程
			#include <map> #include <iostream> #include <string> #include <windows.h> #i ... 
- zz“老司机”成长之路:自动驾驶车辆调试实践
			随着自动驾驶技术的发展,一辆新车从被改装到上路需要经过的调试流程也有了许多提升.今天,我希望结合自己之前的调车经验来跟大家分享一下我们是如何将系统的各个模块逐步上车.调试.集成,进而将一辆“新手”车培 ... 
- ini_set()
			ini_set ( string $varname , string $newvalue ) : string 设置指定配置选项的值.这个选项会在脚本运行时保持新的值,并在脚本结束时恢复. 参数 va ... 
- 【2019.7.24 NOIP模拟赛 T1】道路建设(road)(水题)
			原题与此题 原题是一道神仙不可做题,两者区别在于,原题不能有重边和自环. 然而,这题可以有重边... 于是这题就变成了一道大水题. 此题的解法 考虑如何构造. 对于\(n\le10^4\)的情况: 对 ... 
- 校园邮箱注册jetbrains全家桶遇到的问题
			校园邮箱怎么注册jetbrains账号,百度就可以,发两次邮件 我遇到的问题: 1.登录时出现connection refused 因为之前都是破解使用,所以修改过hosts文件,添加了“0.0.0. ... 
- 【SpringCloud之pigx框架学习之路 】1.基础环境安装
			[SpringCloud之pigx框架学习之路 ]1.基础环境安装 [SpringCloud之pigx框架学习之路 ]2.部署环境 1.Cmder.exe安装 (1) windows常用命令行工具 下 ... 
- 模型的细致程度--Level of Development
			模型的细致程度,英文称作Level of Details,也叫作Level of Development.描述了一个BIM模型构件单元从最低级的近似概念化的程度发展到最高级的演示级精度的步骤.美国建筑 ... 
- 联邦学习PySyft
			Steps involved in the Federated Learning Approach The mobile devices download the global ML model Da ... 
- select下拉框option的样式修改
			select原样式: 进行样式修改后的样式: 附上修改代码: //select外面必须包裹一个div,用来覆盖select原有的样式<div class="option"&g ... 
