1 条题解

  • 0
    @ 2023-5-4 14:15:21
    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 5e5+10;
    
    int c[N];
    int n,m;
    
    int lowbit(int i)
    {
    	return i & -i;
    }
    
    void update(int i,int val)
    {
    	while(i<=n)
    	{
    		c[i]+=val;
    		i+=lowbit(i);
    	}
    }
    
    int sum(int i)
    {
    	int res = 0;
    	while(i>0)
    	{
    		res+=c[i];
    		i-=lowbit(i);
    	}
    	return res;
    }
    
    int main()
    {
    	cin >> n >> m;
    	while(m--)
    	{
    		int op,x,y;
    		cin >> op;
    		if(op == 1)
    		{
    			cin >> x >> y;
    			//区间加1 
    			update(x,1);
    			update(y+1,1);
    		}
    		else
    		{
    			cin >> x;
    			//如何把区间和变成0或者1?取余是一个十分巧妙的方法 
    			cout << sum(x)%2 << endl;
    		}
    	}
    	return 0; 
    }
    
    • 1

    信息

    ID
    596
    时间
    1000ms
    内存
    512MiB
    难度
    5
    标签
    递交数
    21
    已通过
    12
    上传者