17-09-10四校联考

Posted whz2002

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17-09-10四校联考相关的知识,希望对你有一定的参考价值。

T1:从高到低依次确定答案的每一位,如果每个区间的第i位都可以选1,那么全部选1,答案的这一位就是1。

如果该区间这一位能够选择0或1,那么将区间缩小为2i至ri

如果不是所有区间都能选1,答案的这一位是0。

如果该区间这一位能够选择0或1,则该区间选0,并将所有比这一位低的位的值全部赋为1。时间复杂度O(n log 1018)。

Code:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define ll long long
 5 #define Lg 60
 6 #define MN 100005
 7 using namespace std;
 8 inline ll in(){
 9     ll x=0;bool f=0; char c;
10     for (;(c=getchar())<0||c>9;f=c==-);
11     for (x=c-0;(c=getchar())>=0&&c<=9;x=(x<<3)+(x<<1)+c-0);
12     return f?-x:x;
13 }
14 ll l[MN],r[MN],n,ans;
15 int main()
16 {
17     n=in();for (int i=1;i<=n;++i) l[i]=in(),r[i]=in();
18     for (int i=Lg;i>=0;--i){
19         bool f=0;for (int j=1;j<=n;++j)
20         if (!(r[j]&(1ll<<i))) {f=1;break;}
21         if (!f){
22             ans+=(1ll<<i);for (int j=1;j<=n;++j)
23             if (!(l[j]&(1ll<<i))) l[j]=0;
24         }else for (int j=1;j<=n;++j)
25         if ((l[j]&(1ll<<i))!=(r[j]&(1ll<<i))) r[j]=(1ll<<Lg)-1;
26     }printf("%lld",ans);return 0;
27 }

 

以上是关于17-09-10四校联考的主要内容,如果未能解决你的问题,请参考以下文章

10.29 FJ四校联考

[20180901]四校联考

2017-2-19四校联考

[20180819]四校联考

四校联考——20170730模拟赛

20170820四校联考