Codeforces Round #757 (Div. 2)
A B两题很简单,C有点绕
原题链接
找了几个不错的博客
大佬的博客
这个大佬讲的思路很清晰,可以借鉴
还有一点:同或和还有一个性质,两个区间的同或和进行或运算可以得到他们并集的同或和。根据这一点,加上题目中提到必然会遍及每一个元素,那么把给出的m个区间的同或和进行或运算即可得到[1,n]的同或和x。
附上代码
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef long long ll;
typedef pair<int,int> 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<m;i++){
ll l,r,x;cin>>l>>r>>x;ans=ans|x;}ll sum=q_mi(2,n-1)*ans%mod;cout<<sum<<endl;}return 0;
}