我考场代码是 修改O(1) 查询O(n),只有76分
某份题解以 修改O(n)(准确来说O(3n)) 查询O(1),拿到了AC
那么1、2操作数量难道失衡的那么严重?
本人代码:
#include <iostream>
using namespace std;
int n,q,a[8010],k,x,v,ans;
int read()
{
int s = 0;
char ch = getchar();
while(!isdigit(ch)) ch = getchar();
while(isdigit(ch)) {
s = s * 10 + ch - '0';
ch = getchar();
}
return s;
}
void write(int x)
{
if(x > 9) write(x/10);
putchar(x % 10 + '0');
return;
}
int main()
{
n=read();
q=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=1;i<=q;i++)
{
k=read();
if(k==2)
{
x=read();
ans=1;
for(int i=1;i<x;i++)
if(a[i]<=a[x])
ans++;
for(int i=x+1;i<=n;i++)
if(a[i]<a[x])
ans++;
write(ans);
putchar('\n');
}
else
{
x=read();
v=read();
a[x]=v;
}
}
return 0;
}