09 2013 档案
摘要:二分查找 1 #include 2 #define min(a,b) (a=a[i])14 sum+=(tmp-a[i])/c[i]+1;15 }16 return sum;17 }18 int main()19 {20 while(scanf("%d",&n)!=EOF)21 {22 for(int i=0;i>1;28 if(cal(mid)&1) r=mid;29 else l=mid+1;30 }31 if(l==1LL=a[i]&&l...
阅读全文
摘要:比赛的时候感觉是线段树,直接求,超时了。看了题解,才知道是有点规律的,要先固定端点,求出所有以该端点为左端点的区间,然后不断移动左端点,直到求出所有区间。用nxt[i]存储下一个出现a[i]的下标。先求出所有的mex(1,i)再删除a[1],则在区间(2,nxt[1]-1)上mex(2,i)>a[1]的值全部改为a[1],因为mex(2,i)是递增的,所以可以求出第一个大于a[1]的mex(2,i)的下标,然后进行区间更新。以此类推,从左到右删除所有元素,就可以得出答案。 1 #include 2 #include 3 #include 4 #include 5 using name..
阅读全文
摘要:1 #include 2 #include 3 const int maxn=100000+5; 4 int sum[maxn>1;31 if(Lm) update(L,R,inc,m+1,r,rt>1;44 if(lm) ret+=query(L,R,m+1,r,rt<<1|1);46 return ret;47 }48 int n,m;49 int main()50 {51 int t;52 scanf("%d",&t);53 while(t--)54 {55 scanf("%d%d",&n,&m);5
阅读全文
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=100000+5; 6 int num[maxn>1;23 build(l,m,rt>1;35 if(x>1;46 if(Rm) return query(L,R,m+1,r,rt<<1|1);48 int a=query(L,R,l,m,rt<<1);49 int b=query(L,R,m+1,r,rt<<1|1);50 return min(a,b);51 }52 int main()53
阅读全文
浙公网安备 33010602011771号