QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#362906#7660. Investigating Frog Behaviour on Lily Pad PatternsCaptainflyTL 0ms0kbC++172.2kb2024-03-23 17:33:542024-03-23 17:33:54

Judging History

This is the latest submission verdict.

  • [2024-03-23 17:33:54]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 0kb
  • [2024-03-23 17:33:54]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
#define mp make_pair
inline int gcd(int a, int b){return b == 0 ? a : gcd(b, a % b);}
inline int lcm(int a, int b){return a / gcd(a, b) * b;}
const ll mod=1000000007;
ll qpow(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
inline int read()
{
int X=0; bool flag=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
if(flag) return X;
return ~(X-1);
}
#define lson rt<<1
#define rson rt<<1|1
const int maxn = 1200010;
const int INF = 1e9;
struct node{
    int l,r,mi;
}seg[maxn<<2];
int x[maxn];
int n,q;
void pushup(int rt)
{
    seg[rt].mi=min(seg[lson].mi,seg[rson].mi);
}
void build(int rt,int l,int r)
{
    seg[rt].l=l;
    seg[rt].r=r;
    if(l==r)
    {
        seg[rt].mi=l;
        return ;
    }
    int mid = (l+r)>>1;
    build(lson,l,mid);
    build(rson,mid+1,r);
    pushup(rt);
}
void upd(int rt,int pos,int val)
{
    int l=seg[rt].l;
    int r=seg[rt].r;
    if(l==r)
    {
        seg[rt].mi=val;
        return ;
    }
    int mid = (l+r)>>1;
    if (pos<=mid) upd(lson,pos,val);
    else if(pos>mid) upd(rson,pos,val);
    pushup(rt);
}
int query(int rt,int x,int y)
{
    int l=seg[rt].l;
    int r=seg[rt].r;
    if(x<=l&&r<=y)
    {
        return seg[rt].mi;
    }
    int mid = (l+r)>>1;
    int ans=1e9;
    if(x<=mid) ans=min(ans,query(lson,x,y));
    if(y>mid) ans=min(ans,query(rson,x,y));
}
int main()
{
    // ios::sync_with_stdio(false);
    // cin.tie(0);
    // cout.tie(0);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x[i]);
    }
    scanf("%d",&q);
    int maxx=x[n]+q;
    build(1,1,maxn);
    for(int i=1;i<=n;i++)
    {
        upd(1,x[i],INF);
    }
    
    while(q--)
    {
        int p;
        scanf("%d",&p);
        int pos=query(1,x[p],maxn);
        printf("%d\n",pos);
        upd(1,x[p],x[p]);
        x[p]=pos;
        upd(1,pos,INF);
    }
    return 0;
}

詳細信息

Test #1:

score: 0
Time Limit Exceeded

input:

5
1 2 3 5 7
3
1
2
4

output:


result: