QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#362906 | #7660. Investigating Frog Behaviour on Lily Pad Patterns | Captainfly | TL | 0ms | 0kb | C++17 | 2.2kb | 2024-03-23 17:33:54 | 2024-03-23 17:33:54 |
Judging History
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