zoukankan      html  css  js  c++  java
  • Codeforces Round #546 (Div. 2)

    题目编号1136

    A

    暴力咯。。

    #include <cstdio> 
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    const int N = 105;
    
    int n, m;
    struct A{
    	int l, r;
    }a[N];
    
    int main(){
    	scanf("%d", &n);
    	for(int i = 1; i <= n; ++i){
    		scanf("%d%d", &a[i].l, &a[i].r); 
    	}
    	scanf("%d", &m);
    	for(int i = 1; i <= n; ++i){
    		if(a[i].r >= m){
    			printf("%d
    ", n - i + 1);
    			return 0;
    		}
    	}
        return 0;	
    }
    

    B

    先往少的一边跳

    #include <cstdio> 
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    const int N = 105;
    
    int n, k;
    
    int main(){
        scanf("%d%d", &n, &k);
        printf("%d", n + 1 + n - 1 + min(k - 1, n - k) + n);
        return 0;	
    }
    

    C

    同一斜行上点不变

    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    const int N = 505;
    const int M = 5e5 + 5;
    
    int n, m;
    int a[N][N], b[N][N];
    int lsh[M], lsize;
    long long cnt[2][N << 1];
    long long c2[2][N << 1];
    //bool flag;
    
    int main(){
    	scanf("%d%d", &n, &m);
    	for(int i = 1; i <= n; ++i){
    		for(int j = 1; j <= m; ++j){
    			scanf("%d", &a[i][j]);
    		    lsh[++lsize] = a[i][j];
    		}
    	}
    	for(int i = 1; i <= n; ++i){
    		for(int j = 1; j <= m; ++j){
    			scanf("%d", &b[i][j]);
    			lsh[++lsize] = b[i][j];
    		}
    	}
    	sort(lsh + 1, lsh + lsize + 1);
    	lsize = unique(lsh + 1, lsh + lsize + 1) - lsh - 1;
    	for(int i = 1; i <= n; ++i){
    		for(int j = 1; j <= m; ++j){
    			/*if((i == 1 && j == 1) || (i == n && j == m)){
    		        if(a[i][j] != b[i][j]){
    		        	printf("NO
    ");
    		        	return 0;
    		        }		
    			}*/ 
    			cnt[0][i + j - 1] += lower_bound(lsh + 1, lsh + lsize + 1, a[i][j]) - lsh;
    			cnt[1][i + j - 1] += lower_bound(lsh + 1, lsh + lsize + 1, b[i][j]) - lsh;
    			c2[0][i + j - 1] ^= lower_bound(lsh + 1, lsh + lsize + 1, a[i][j]) - lsh;
    			c2[1][i + j - 1] ^= lower_bound(lsh + 1, lsh + lsize + 1, b[i][j]) - lsh;
    		}
    	}
    	for(int i = 1; i <= n + m - 1; ++i){
    		if(cnt[0][i] != cnt[1][i] || c2[0][i] != c2[1][i]){
    			printf("NO
    ");
    			return 0;
    		}
    	}
    	printf("YES
    ");
        return 0;	
    }
    

    D

    计算出度 记录能到达最后的位置

    #include <cstdio> 
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #include <bitset>
    using namespace std;
    const int N = 3e5 + 5;
    
    struct Edge{
    	int v, next;
    }edge[N << 1];
    int head[N], esize;
    inline void addedge(int x, int y){
    	edge[++esize] = (Edge){y, head[x]};
    	head[x] = esize;
    }
    int n, m, ans;
    int a[N];
    int d[N]; 
    
    inline void ins(int x){
    	for(int i = head[x], vv; ~i; i = edge[i].next){
    		vv = edge[i].v;
    		++d[vv];
    	}
    }
    
    int main(){
    	memset(head, -1, sizeof(head));
    	scanf("%d%d", &n, &m);
    	for(int i = 1; i <= n; ++i){
    		scanf("%d", &a[i]);
    	}
    	for(int i = 1, x, y; i <= m; ++i){
    		scanf("%d%d", &x, &y);
    		addedge(y, x);
    		//++d[x];
    	}
    	ans = 0;
    	ins(a[n]);
    	for(int i = n - 1; i >= 1; --i){
    //		printf("%d
    ", d[a[i]]);
    		if(d[a[i]] == n - i){
    			--n;
    			++ans;
    		}
    		else{
    			ins(a[i]);
    		} 
    	}
    	printf("%d", ans);
        return 0;	
    }
    

    E

    分块暴力维护

    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    const int N = 1e5 + 5;
    const int M = 500;
    int n, m;
    long long a[N], b[N], sb[N];
    
    struct Bl{
    	long long fir[M], sum[M], atag[M];
    	int size, cnt, bel[N];
    	int l[N], r[N];
    	void build(){
    		size = sqrt(n);
    		cnt = (n - 1) / size + 1;
    		for(int i = 1; i <= cnt; ++i){
    			l[i] = r[i - 1] + 1, r[i] = min(n, l[i] + size - 1);
    			for(int j = l[i]; j <= r[i]; ++j){
    				sum[i] += a[j];
    				bel[j] = i;
    				atag[i] += sb[j - 1] - sb[l[i] - 1];
    			}
    			fir[i] = a[l[i]];
    		}
    	}
        void update(int x){
        	a[l[x]] = fir[x]; sum[x] = a[l[x]];
        	for(int i = l[x] + 1; i <= r[x]; ++i){
        		a[i] = max(a[i], a[i - 1] + b[i - 1]);
        		sum[x] += a[i];
        	}
        }
        void ins(int x, int y){
        	int pos = bel[x];
        	update(pos);
        	a[x] += y; 
    		if(x == l[pos]) fir[pos] += y;
    		update(pos);
    		
    		int end = cnt; //ע��������ܲ�������!! 
    		for(int i = pos + 1; i <= cnt; ++i)
    			if(fir[i] > a[x] + sb[l[i] - 1] - sb[x - 1]){end = i - 1; break;}
    		for(int i = pos + 1; i < end; ++i){
    			fir[i] = a[x] + sb[l[i] - 1] - sb[x - 1];
    			sum[i] = 1ll * (r[i] - l[i] + 1) * fir[i] + atag[i];
    		}
    		if(end != pos){
    			fir[end] = a[x] + sb[l[end] - 1] - sb[x - 1];
    			update(end);
    		}
        }
        long long qry(int x, int y){
        	long long res = 0;
        	int px = bel[x], py = bel[y];
        	if(px == py){
        	    update(px);
        	    for(int i = x; i <= y; ++i) res += a[i];
        	    return res;
        	}
        	update(px);
        	for(int i = x; i <= r[px]; ++i) res += a[i];
        	update(py);
        	for(int i = l[py]; i <= y; ++i) res += a[i];
    
        	for(int i = px + 1; i < py; ++i){
        		res += sum[i];
        	}
        	return res;
        }
    }bl;
    
    
    int main(){
        scanf("%d", &n);
        for(int i = 1; i <= n; ++i){
        	scanf("%lld", &a[i]);
        }
        for(int i = 1; i < n; ++i){
        	scanf("%lld", &b[i]);
        	sb[i] = sb[i - 1] + b[i];
        }
        
        bl.build();
        scanf("%d", &m);
        char opt[10];
        for(int i = 1, x, y; i <= m; ++i){
        	scanf("%s%d%d", opt, &x, &y);
        	if(opt[0] == '+'){
        		bl.ins(x, y);
        	}
        	else {
        		printf("%lld
    ", bl.qry(x, y));
        	}
        }
        return 0;	
    }
    
  • 相关阅读:
    作业3
    数组求和
    2.自己的Github试用过程
    2.自己的Github注册流程
    图片左右滑动整理为插件
    artDialog中的time参数,ajax请求中的异步与同步
    简单的图片放大镜效果插件
    3月份学习安排
    前端好的网站
    web app开发中遇到的问题
  • 原文地址:https://www.cnblogs.com/hjmmm/p/10525645.html
Copyright © 2011-2022 走看看