[CQOI 2006]线段树之简单题题解

Description

有一个n个元素的数组,每个元素初始均为0。有m条指令,

要么让其中一段连续序列数字反转--0变1,1变0(操作1),

要么询问某个元素的值(操作2)。

例如当n=20时,10条指令如下:

Format

Input

第一行包含两个整数n,m,表示数组的长度和指令的条数,以下m行,每行的第一个数t表示操作的种类。若t=1,

则接下来有两个数L, R (L<=R),表示区间[L, R]的每个数均反转;若t=2,则接下来只有一个数I,表示询问的下 标。

1<=n<=100,000

1<=m<=500,000

Output

每个操作2输出一行(非0即1),表示每次操作2的回答

Samples

输入数据 1

20 10
1 1 10
2 6
2 12
1 5 12
2 6
2 15
1 6 16
1 11 17
2 12
2 6

输出数据 1

1
0
0
0
1
1

思路

直接线段树即可。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}#include<bits/stdc++.h>
using namespace std;
long long n,m,a[5000005],a2[5000005],u,x,y;
long long lb(long long x){
    return x&(-x);
}
void ci(long long x,long long d){
    while(x<=n+2){
        a2[x]+=d;
        x+=lb(x);
    }
}
long long co(long long x){
    long long lks=0;
    while(x>=1){
        lks+=a2[x];
        x-=lb(x);
    }
    return lks;
}
int main(){
	cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u;
        if(u==1){
            cin>>x>>y;
            ci(x+1,1);
            ci(y+2,1);
        }
        else{
            cin>>x;
            cout<<co(x+1)%2<<endl;
        }
    }
    return 0;
}

posted @ 2025-10-28 21:35  bz02_2023f2  阅读(2)  评论(0)    收藏  举报  来源