【TYVJ】P1038 忠诚

【算法】线段树

#include<cstdio>
#include<algorithm>
using namespace std;
struct treess{int l,r,ms;}t[400010];
const int maxn=200010,inf=0x3f3f3f3f;
int a[maxn],n,m;
void build(int k,int l,int r)
{
    t[k].l=l;t[k].r=r;
    if(l==r){t[k].ms=a[l];return;}
    int mid=(l+r)>>1;
    build(k<<1,l,mid);
    build(k<<1|1,mid+1,r);
    t[k].ms=min(t[k<<1].ms,t[k<<1|1].ms);
//    printf("[%d] l=%d r=%d ms=%d",k,t[k].l,t[k].r,t[k].ms);
}
int ask(int k,int l,int r)
{
    int left=t[k].l,right=t[k].r,ans=inf;
    if(l<=left&&r>=right)return t[k].ms;
     else
      {
        int mid=(left+right)>>1;
        if(l<=mid)ans=min(ans,ask(k<<1,l,r));
        if(r>mid)ans=min(ans,ask(k<<1|1,l,r));
      }
    return ans;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    build(1,1,n);
    int nowl,nowr;
    for(int i=1;i<m;i++)
     {
         scanf("%d%d",&nowl,&nowr);
         printf("%d ",ask(1,nowl,nowr));
     }
    scanf("%d%d",&nowl,&nowr);
    printf("%d",ask(1,nowl,nowr));
    return 0;
}

时间: 2024-12-28 22:03:49

【TYVJ】P1038 忠诚的相关文章

tyvj:1038 忠诚 线段树

tyvj:1038 忠诚 Time Limit: 1 Sec  Memory Limit: 131072KiBSubmit: 9619  Solved: 3287 题目连接 http://www.tyvj.cn/p/1038 Description 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满 意.但是由于一些人的挑拨,财主还是对管家产生了怀疑.于是他决定用一种特别的方法来判断管家的忠诚,他把每次

tyvj 1038 忠诚 区间最小值 线段树或者rmq

P1038 忠诚 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了怀疑.于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题. 输入

TYVJ 1038忠诚 ST 求区间最值

已经不搞ACM了,就是最近随便做点题,就在这里存个代码 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 const int maxn = 100005; 5 int a[maxn][20]; 6 int x[maxn]; 7 void init(int n) 8 { 9 for(int i = 1;i<=n;++i)a[i][0] = x[i]; 10 int s = 1,r = 0; 1

回档|忠诚2|zkw线段树

线段树,大家一看就明白了吧,这题就是一模板题,我学zkw线段树用的.单点维护,区间最值. 题目是tyvj的忠诚2. #include"iostream" #include"cstdio" using namespace std; int M; int T[10000000]; int read() { char c=getchar(); int a=0; while (c<'0'||c>'9') c=getchar(); while (c>='0'

忠诚//线段树

P1038 忠诚 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了怀疑.于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题. 输入

TYVJ 2049 魔法珠 sg函数

题意:链接 方法:sg函数 解析: tyvj的题大部分都没题解啊- - 不过这样貌似会更好?感觉做这的题都需要自己动脑啊- - 虽然嘴上说着好烦然而心里觉得好评? 回归正题 设sg[x]表示数x的sg值,这好像是废话 然后对于读入的a[i],将所有的a[i]的sg值异或起来如果不是零则先手赢反之后手 维护的时候有个坑. 每次求约数的时候,数组要在sg里开,因为如果递归下去的话,全局变量的话会被更改,会被坑死. 然后就是怎么维护了 对于x,先求约数 之后枚举哪个数不取,将其他的异或(或者先都异或起

bzoj 3224: Tyvj 1728 普通平衡树.

3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 15114  Solved: 6570[Submit][Status][Discuss] Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为

【模板】ST表 洛谷P1816 忠诚

P1816 忠诚 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于 管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了怀疑.于是他决定用一种特别的方法来判断管家的忠诚,他把每次的 账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题. 输入输出格式 输入格式: 输入中第一行有两个数m,n表示有m(m<=100000

codevs 2174 忠诚S

2174 忠诚S 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了怀疑.于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作