A B两题很简单,C有点绕
原题链接
找了几个不错的博客
大佬的博客
这个大佬讲的思路很清晰,可以借鉴
还有一点:同或和还有一个性质,两个区间的同或和进行或运算可以得到他们并集的同或和。根据这一点,加上题目中提到必然会遍及每一个元素,那么把给出的m个区间的同或和进行或运算即可得到[1,n]的同或和x。
附上代码
#includeusing namespace std; #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); typedef long long ll; typedef pair PII; const int N=1e5+10; const int mod=1e9+7; ll q_mi(int a,int b) { ll ans=1; while(b) { if(b&1) ans=ans*a%mod; a=(ll)a*a%mod; b>>=1; } return ans; } int main() { IOS; int t; cin>>t; while(t--) { int n,m; ll ans=0; cin>>n>>m; for(int i=0;i >l>>r>>x; ans=ans|x; } ll sum=q_mi(2,n-1)*ans%mod; cout< 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)