zoukankan      html  css  js  c++  java
  • 贪婪大陆 树状数组

    题目背景

    面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾。现在,小FF的后方是一望无际的大海, 前方是变异了的超级蚂蚁。 小FF还有大好前程,他可不想命丧于此, 于是他派遣手下最后一批改造SCV布置地雷以阻挡蚂蚁们的进攻。

    题目描述

    小FF最后一道防线是一条长度为N的战壕, 小FF拥有无数多种地雷,而SCV每次可以在[ L , R ]区间埋放同一种不同于之前已经埋放的地雷。 由于情况已经十万火急,小FF在某些时候可能会询问你在[ L' , R'] 区间内有多少种不同的地雷, 他希望你能尽快的给予答复。

    对于30%的数据: 0<=n, m<=1000;

    对于100%的数据: 0<=n, m<=10^5.

    输入输出格式

    输入格式:

    第一行为两个整数n和m; n表示防线长度, m表示SCV布雷次数及小FF询问的次数总和。

    接下来有m行, 每行三个整数Q,L , R; 若Q=1 则表示SCV在[ L , R ]这段区间布上一种地雷, 若Q=2则表示小FF询问当前[ L , R ]区间总共有多少种地雷。

    输出格式:

    对于小FF的每次询问,输出一个答案(单独一行),表示当前区间地雷总数。

    输入输出样例

    输入样例#1: 复制
    5 4
    1 1 3
    2 2 5
    1 2 4
    2 3 5
    
    输出样例#1: 复制
    1
    2
    
    树状数组维护一个区间的头尾;
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<map>
    #include<set>
    #include<vector>
    #include<queue>
    #include<bitset>
    #include<ctime>
    #include<deque>
    #include<stack>
    #include<functional>
    #include<sstream>
    //#include<cctype>
    //#pragma GCC optimize(2)
    using namespace std;
    #define maxn 1000005
    #define inf 0x7fffffff
    //#define INF 1e18
    #define rdint(x) scanf("%d",&x)
    #define rdllt(x) scanf("%lld",&x)
    #define rdult(x) scanf("%lu",&x)
    #define rdlf(x) scanf("%lf",&x)
    #define rdstr(x) scanf("%s",x)
    typedef long long  ll;
    typedef unsigned long long ull;
    typedef unsigned int U;
    #define ms(x) memset((x),0,sizeof(x))
    const long long int mod = 1e9 + 7;
    #define Mod 1000000000
    #define sq(x) (x)*(x)
    #define eps 1e-3
    typedef pair<int, int> pii;
    #define pi acos(-1.0)
    //const int N = 1005;
    #define REP(i,n) for(int i=0;i<(n);i++)
    typedef pair<int, int> pii;
    inline ll rd() {
    	ll x = 0;
    	char c = getchar();
    	bool f = false;
    	while (!isdigit(c)) {
    		if (c == '-') f = true;
    		c = getchar();
    	}
    	while (isdigit(c)) {
    		x = (x << 1) + (x << 3) + (c ^ 48);
    		c = getchar();
    	}
    	return f ? -x : x;
    }
    
    ll gcd(ll a, ll b) {
    	return b == 0 ? a : gcd(b, a%b);
    }
    int sqr(int x) { return x * x; }
    
    
    /*ll ans;
    ll exgcd(ll a, ll b, ll &x, ll &y) {
    	if (!b) {
    		x = 1; y = 0; return a;
    	}
    	ans = exgcd(b, a%b, x, y);
    	ll t = x; x = y; y = t - a / b * y;
    	return ans;
    }
    */
    
    int n, m;
    int lowbit(int x) {
    	return x & -x;
    }
    int sum1[maxn], sum2[maxn];
    void add1(int x) {
    	for (int i = x; i <= n; i += lowbit(i)) {
    		sum1[i]++;
    	}
    }
    
    void add2(int x) {
    	for (int i = x; i <= n; i += lowbit(i)) {
    		sum2[i]++;
    	}
    }
    
    int query1(int x) {
    	int s = 0;
    	while (x>0) {
    		s += sum1[x]; x -= lowbit(x);
    	}
    	return s;
    }
    
    int query2(int x) {
    	int s = 0;
    	while (x > 0) {
    		s += sum2[x]; x -= lowbit(x);
    	}
    	return s;
    }
    
    int main() {
    	//ios::sync_with_stdio(0);
    	rdint(n); rdint(m);
    	int q, l, r;
    	for (int i = 1; i <= m; i++) {
    		rdint(q); rdint(l); rdint(r);
    		if (q == 1) {
    			add1(l); add2(r);
    		}
    		else {
    			cout << query1(r) - query2(l - 1) << endl;
    		}
    	}
    	return 0;
    }
    
    
    
    EPFL - Fighting
  • 相关阅读:
    python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures
    python unittest单元测试框架-2discover
    python unittest单元测试框架-1
    python selenium-4自动化测试模型
    python selenium-9 grid模式
    20)PHP,数组的遍历
    19)PHP,数组知识
    18)PHP,可变函数,匿名函数 变量的作用域
    17)PHP,函数基础和参数问题
    16)PHP, set_include_path
  • 原文地址:https://www.cnblogs.com/zxyqzy/p/10261024.html
Copyright © 2011-2022 走看看