HDU 6273.Master of GCD-差分数组 (2017中国大学生程序设计竞赛-杭州站-重现赛(感谢浙江理工))
Super-palindrome
题面地址:http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf
这道题是差分数组的题目,线段树也可以写,但是代码太长没必要。
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<queue> 7 using namespace std; 8 typedef long long ll; 9 const int maxn=1e5+10; 10 const int inf=0x3f3f3f3f; 11 const int mod=998244353; 12 ll kuaisumi(ll a,ll b){ 13 ll ans=1; 14 while(b!=0){ 15 if(b%2==1) 16 ans=ans*a%mod; 17 a=a*a%mod; 18 b/=2; 19 } 20 return ans; 21 } 22 ll a[maxn],b[maxn],na[maxn],nb[maxn]; 23 int main(){ 24 int t; 25 ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 26 cin>>t; 27 while(t--){ 28 memset(a,0,sizeof(a)); 29 memset(b,0,sizeof(b)); 30 memset(na,0,sizeof(na)); 31 memset(nb,0,sizeof(nb)); 32 int n,m; 33 cin>>n>>m; 34 a[0]=0;b[0]=0; 35 for(int i=0;i<m;i++){ 36 int l,r,x; 37 cin>>l>>r>>x; 38 if(x==2){a[l-1]++,a[r]--;} 39 else{b[l-1]++,b[r]--;} 40 } 41 na[0]=a[0],nb[0]=b[0]; 42 ll mina=a[0],minb=b[0]; 43 for(int i=1;i<n;i++){ 44 na[i]=na[i-1]+a[i];mina=min(mina,na[i]); 45 nb[i]=nb[i-1]+b[i];minb=min(minb,nb[i]); 46 } 47 ll ans=(kuaisumi(2,mina)*kuaisumi(3,minb))%mod; 48 cout<<ans<<endl; 49 } 50 }