NC19429. 红球进黑洞
描述
输入描述
第一行两个整数n和m,表示数列长度和询问次数
第二行有n个整数,表示这个数列的初始数值
接下来有m行,形如 1 l r 或者 2 l r k
分别表示查询
或者对于l ≤ i ≤ r,将xi变为
输出描述
对于每一个查询操作,输出查询的结果并换行
示例1
输入:
10 10 8 5 8 9 3 9 8 3 3 6 2 1 4 1 1 2 6 2 9 10 8 1 1 7 2 4 7 8 2 8 8 6 2 2 3 0 1 1 2 2 9 10 4 1 2 3
输出:
33 50 13 13
C++11(clang++ 3.9) 解法, 执行用时: 843ms, 内存消耗: 3860K, 提交时间: 2020-09-13 09:05:30
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const int maxn = 1e5+50; ll n,m; ll a[maxn]; int main() { cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; while(m--) { int q;cin>>q; ll l,r,k; if(q==1) { cin>>l>>r; ll s = 0; while(l<=r) s+=a[l],l++; cout<<s<<endl; } else { cin>>l>>r>>k; while(l<=r) a[l]^=k,l++; } } }
C++14(g++5.4) 解法, 执行用时: 2007ms, 内存消耗: 1256K, 提交时间: 2020-06-16 20:52:24
#include<cstdio> int n,m,l,r,k,i,x,a[100010]={0}; long long ans=0; int main() { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%d",&a[i]); while(m--) { ans=0; scanf("%d%d%d",&x,&l,&r); if(x==1) { for(i=l;i<=r;i++) ans+=a[i]; printf("%llu\n",ans); } else { scanf("%d",&k); for(i=l;i<=r;i++) a[i]^=k; } } }