您的位置:首页 > 其它

AtCoder Regular Contest 082

2017-09-02 22:28 435 查看
我都出了F了……结果并没有出E……atcoder让我差4分上橙是啥意思啊……

C - Together

题意:把每个数加1或减1或不变求最大众数。

#include<cstdio>
#include<algorithm>
#define MN 110000
#define int long long
using namespace std;

int read_p,read_ca;
inline int read(){
read_p=0;read_ca=getchar();
while(read_ca<'0'||read_ca>'9') read_ca=getchar();
while(read_ca>='0'&&read_ca<='9') read_p=read_p*10+read_ca-48,read_ca=getchar();
return read_p;
}
int n,m,X,K,T[MN],la=0,Q,t,a,l[MN],r[MN],L[MN],R[MN];
signed main(){
X=read();
K=read();
l[0]=0;L[0]=0;r[0]=X;R[0]=X;
for (int i=1;i<=K;i++){
a=read();
T[i]=a;
l[i]=l[i-1];r[i]=r[i-1];
L[i]=L[i-1]-(a-la);
R[i]=R[i-1]-(a-la);
if (L[i]<=R[i])
if (R[i]<=0){
l[i]=0;L[i]=X;r[i]=0;R[i]=X;
}else{
if (L[i]<0)
l[i]-=L[i],
L[i]=0;

L[i]=X-L[i];R[i]=X-R[i];
}else
if (L[i]<=0){
l[i]=0;L[i]=X;r[i]=0;R[i]=X;
}else{
if (R[i]<0)
r[i]+=R[i],
R[i]=0;

L[i]=X-L[i];R[i]=X-R[i];
}
la=a;
}

/*for (int i=0;i<=K;i++)
printf("%d %d %d %d %d\n",i,l[i],r[i],L[i],R[i]);*/
Q=read();
for (int i=1;i<=Q;i++){
t=read();a=read();
int _l=0,_r=K,mid;
while (_l<_r){
if (T[mid=_l+_r+1>>1]<=t) _l=mid;else _r=mid-1;
}
t-=T[_l];
if (a<=l[_l]) a=L[_l];else if (a>=r[_l]) a=R[_l];else if (L[_l]==R[_l]) a=L[_l];else
if (L[_l]<R[_l]) a=L[_l]+(a-l[_l]);else a=L[_l]-(a-l[_l]);

a-=t;
if (a<0) a=0;

if (_l&1) a=X-a;

printf("%lld\n",a);
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: