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 }
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个 java 空指针异常的解决过程
· 揭开 SQL Server 和 PostgreSQL 填充因子的神秘面纱
· 没有调度器的协程不是好协程,零基础深入浅出 C++20 协程
· 别做抢活的导演:代码中的抽象层次原则
· 从 Redis 客户端超时到 .NET 线程池挑战
· dotnetty 内存泄漏的BUG修复了
· 20250709 - GMX V1 攻击事件: 重入漏洞导致的总体仓位价值操纵
· 面试官:如何实现大模型连续对话?
· TinyEditor v4.0 alpha 版本发布:表格更强大,表情更丰富,上传体验超乎想象!
· 一个java空指针异常的解决过程