站外题求条
  • 板块题目总版
  • 楼主banglee
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/12/4 12:52
  • 上次更新2024/12/4 18:44:55
查看原帖
站外题求条
681292
banglee楼主2024/12/4 12:52

零花钱 时限:2s 空间:256m

小明把过去n天里每天使用的零花钱记录了下来,他认为对于一段时间(第s天至第t天)里,如果第(s+1)天至第(t-1)天中每天的花费都不高于第s天和第t天的花费,那么这段时间里他的花费是合理的。

给出s和t,如果这段时间的花费是合理的,则输出“yes”,否则输出“no”。

输入格式

第一行一个整数n(1≤n≤50000),表示n天。

第二行n个整数ai(0≤ai≤500),表示每天的花费。

第三行一个整数m(1≤m≤50000),表示m次询问。

接下来m行,每行两个数s,t(1≤s<t≤50000),且保证s至t之间至少相隔一天。

输出格式

输出m行,表示对应每一询问的答案。

输入/输出例子1 输入:

7

4 3 1 2 3 5 7

3

1 4

2 5

2 6

输出:

no

yes

yes

样例解释

第一个询问,第2个数比第4个数大,所以不合理。

第二个询问,第3、4个数都比第2、5个数小,所以合理。

第三个询问,第3、4、5个数都不大于第2个数和第6个数,所以合理。

code:

#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(3)
#define int long long
int n,m,a[50005],sum[50005][505];
signed main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>n;
    for (int i=1;i<=n;i++) {
        cin>>a[i];
        for (int j=0;j<=500;j++)
            sum[i][j]=sum[i-1][j];
        sum[i][a[i]]++;
    }
    cin>>m;
    for (int i=1,s,t;i<=m;i++) {
        cin>>s>>t;
        int k=0;
        for (int j=min(a[s],a[t])+1;j<=500;j++)
            k+=sum[t-1][j]-sum[s+1][j];
        if (k) cout<<"no\n";
        else cout<<"yes\n";
    }
    return 0;
}
2024/12/4 12:52
加载中...