1 Star 0 Fork 1

saigon/Algorithms

forked from charlieshu/Algorithms 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
U156927_环上区间修改_long.cpp 2.12 KB
一键复制 编辑 原始数据 按行查看 历史
charlie 提交于 2024-01-09 00:01 . move from github to gitee
#include <iostream>
#include <string>
#include <math.h>
#include <stdio.h>
using namespace std;
int count_one(long n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
void print_bit(long n)
{
int l = sizeof(n)*8;//λ
for(int i=l-1; i>=0; i--)
printf("%d", (n&(1<<i)) != 0);
printf("\n");
}
long getMask(int i, int j){
long result = 0xffffffff<<(i-1)>>(32-j+i-1)<<(32-j);
cout<<"mask("<<i<<","<<j<<"): ";
print_bit(result);
return result;
}
int main(){
string s;
int n,m;
cin>>n>>m;
cin>>s;
int nn = ceil(n/32.0);
long ss[nn];
long temp=0;
cout<<"nn: "<<nn<<endl;
for(int i=0;i<nn*32;i++){
temp = temp<<1;
temp += i<n?(s[i] - '0'):0;
if(i%32==31){
ss[i/32] = temp;
cout<<"temp: "<<temp<<endl;
temp = 0;
}
}
for(int i=0;i<m;i++){
int op,l,r;
cin>>op>>l>>r;
if(!op){
int jn = (r>l)?(r/32-l/32+1):(r/32-l/32+1+nn);
int jb = l/32;
for(int j=0; j<jn; j++){
if(j==0){
long mask = (l/32==n/32)?getMask(l%32, n%32):getMask(l%32, 32);
print_bit(mask);
print_bit(ss[jb+j]);
ss[jb+j] ^= mask;
cout<<"==="<<jb+j<<"===>"<<endl;
print_bit(ss[jb+j]);
}else if(j==jn-1){
long mask = getMask(1, r%32);
print_bit(mask);
print_bit(ss[r/32]);
ss[r/32] ^= mask;
cout<<"==="<<r/32<<"===>"<<endl;
print_bit(ss[r/32]);
}else{
print_bit(jb+j<nn?(jb+j):(jb+j-nn));
ss[jb+j<nn?(jb+j):(jb+j-nn)] ^= (0xffffffff);
cout<<"==="<<(jb+j<nn?(jb+j):(jb+j-nn))<<"===>"<<endl;
print_bit(jb+j<nn?(jb+j):(jb+j-nn));
}
}
}
else{
int num = 0;
int jn = (r>l)?(r/32-l/32+1):(r/32-l/32+1+nn);
int jb = l/32;
for(int j=0; j<jn; j++){
if(j==0){
long mask = (l/32==n/32)?getMask(l%32, n%32):getMask(l%32, 32);
num += count_one(ss[jb+j] & mask);
}else if(j==jn-1){
long mask = getMask(1,r%32);
num += count_one(ss[r/32] & mask);
}else{
num += count_one(ss[jb+j]);
}
}
cout<<num<<endl;
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/saigonshu/algorithm.git
git@gitee.com:saigonshu/algorithm.git
saigonshu
algorithm
Algorithms
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385