zoukankan      html  css  js  c++  java
  • 10.11 NOIP模拟题(1)

    /*
    离散化
    差分
    */
    #include<bits/stdc++.h>
    
    #define N 4000007
    
    using namespace std;
    int n,ans;
    int tmp[N],a[N],b[N],s[N];
    
    int main()
    {
        freopen("meizi.in","r",stdin);
        freopen("meizi.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&a[i],&b[i]);
            tmp[(i<<1)-1]=a[i],tmp[i<<1]=b[i];
        }
        int num=(n<<1)+1;
        sort(tmp+1,tmp+num);
        for(int i=1;i<=n;i++)
        {
            a[i]=lower_bound(tmp+1,tmp+num,a[i])-tmp;
            b[i]=lower_bound(tmp+1,tmp+num,b[i])-tmp;
            s[a[i]]++;s[b[i]+1]--; 
        }
        for(int i=1;i<=num;i++) s[i]+=s[i-1];
        for(int i=1;i<=num;i++) ans=max(ans,s[i]);
        printf("%d
    ",ans);
        return 0;
    }

    /*
    容斥原理 先保证每列满足
    答案为 全部(每列满足) - 一行白(每列满足) + 两行白(每列满足)...
    ans=(-1)^k*C(n,k)*(2^(n-k)-1)^m
    阶乘逆元组合数
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    #define N 200001
    #define M 1000000007
    #define ll long long
    
    using namespace std;
    ll fac[N]={1,1},inv[N]={1,1},f[N]={1,1};
    int n,m;
    ll ans;
    
    ll ksm(ll a,ll b)
    {
        ll res=1;
        while(b)
        {
            if(b&1) res=res*a%M;
            b>>=1;a=a*a%M;
        }return res%M;
    }
    
    ll C(ll a,ll b)
    {
        return (fac[a]*inv[b]%M*inv[a-b]%M)%M;
    }
    
    int main()
    {
        freopen("matrix.in","r",stdin);
        freopen("matrix.out","w",stdout);
        for(int i=2;i<N;i++)
        {
            fac[i]=fac[i-1]*i%M;
            f[i]=(M-M/i)*f[M%i]%M;
            inv[i]=inv[i-1]*f[i]%M;
        }
        
        scanf("%d%d",&n,&m);
        for(int k=0;k<=n;k++)
        {
            if(k&1)
              ans=(ans-C(n,k)%M*ksm(ksm(2,n-k)-1,m))%M;
            else
              ans=(ans+C(n,k)%M*ksm(ksm(2,n-k)-1,m))%M;
        }
        printf("%lld
    ",(ans+M)%M);
        return 0;
    }

    /*
    和的期望即期望的和
    55分暴力就行
    
    线段树区间乘,加,求和
    */
    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <map>
    #include <complex>
    
    #define inf 0x3f3f3f3f
    #define eps 1e-10
    
    #define lc k << 1
    #define rc k << 1 | 1
    
    using namespace std;
    
    typedef long long ll;
    typedef pair<ll, int> P;
    ll p;
    double tmp[200005];
    
    struct node{
        double dat, tag1, tag2;
        int l, r;
    };
    
    struct seg{
        node d[800005];
        
        void pushup(int k){
            d[k].dat = d[lc].dat + d[rc].dat;
        }
        
        void build(int k, int l, int r){
            d[k].l = l; d[k].r = r; d[k].tag1 = 0; d[k].tag2 = 1;
            if(l == r){
                d[k].dat = tmp[l];
                return;
            }
            int mid = (l + r) >> 1;
            build(lc, l, mid);
            build(rc, mid + 1, r);
            pushup(k);
        }
        
        void add(int k, double x){
            double len = d[k].r - d[k].l + 1;
            d[k].dat = (d[k].dat + x * len);
            d[k].tag1 = (d[k].tag1 + x);
        }
        
        void mul(int k, double x){
            d[k].dat = d[k].dat * x;
            d[k].tag1 = d[k].tag1 * x;
            d[k].tag2 = d[k].tag2 * x;
        }
        
        void pushdown(int k){
            if(fabs(d[k].tag2 - 1) > eps){
                mul(lc, d[k].tag2);
                mul(rc, d[k].tag2);
                d[k].tag2 = 1;
            }
            if(fabs(d[k].tag1) > eps){
                add(lc, d[k].tag1);
                add(rc, d[k].tag1);
                d[k].tag1 = 0;
            }
        }
        
        void add(int k, int l, int r, double x){
            if(l <= d[k].l && d[k].r <= r){
                add(k, x); return;
            }
            pushdown(k);
            int mid = (d[k].l + d[k].r) >> 1;
            if(l <= mid) add(lc, l, r, x);
            if(r > mid) add(rc, l, r, x);
            pushup(k);
        }
        
        void mul(int k, int l, int r, double x){
            if(l <= d[k].l && d[k].r <= r){
                mul(k, x); return;
            }
            pushdown(k);
            int mid = (d[k].l + d[k].r) >> 1;
            if(l <= mid) mul(lc, l, r, x);
            if(r > mid) mul(rc, l, r, x);
            pushup(k);
        }
        
        double query(int k, int l, int r){
            if(l <= d[k].l && d[k].r <= r){
                return d[k].dat;
            }
            pushdown(k); double sum = 0;
            int mid = (d[k].l + d[k].r) >> 1;
            if(l <= mid) sum = (sum + query(lc, l, r));
            if(r > mid) sum = (sum + query(rc, l, r));
            return sum;
        }
        
    }Seg;
    
    int n, m;
    
    int main(){
            
        freopen("random.in", "r", stdin);
        freopen("random.out", "w", stdout);
        scanf("%d%d", &n, &m);
        for(int i = 1; i <= n; i ++) scanf("%lf", &tmp[i]);
        Seg.build(1, 1, n);
        while(m--){
            int opt, l1, r1, l2, r2; ll x;
            scanf("%d", &opt);
            if(opt == 1){
                scanf("%d%d%d%d", &l1, &r1, &l2, &r2);
                   double d1 = Seg.query(1, l1, r1);
                 double d2 = Seg.query(1, l2, r2);
                   Seg.mul(1, l1, r1, double(r1 - l1) / double(r1 - l1 + 1));
                 Seg.mul(1, l2, r2, double(r2 - l2) / double(r2 - l2 + 1));
                Seg.add(1, l1, r1, d2 / double(r1 - l1 + 1) / double(r2 - l2 + 1));
                 Seg.add(1, l2, r2, d1 / double(r2 - l2 + 1) / double(r1 - l1 + 1));                   
            }
            if(opt == 2){
                scanf("%d%d", &l1, &r1);
                printf("%.8lf
    ", Seg.query(1, l1, r1));
            }
        }
        return 0;
    }
    折花枝,恨花枝,准拟花开人共卮,开时人去时。 怕相思,已相思,轮到相思没处辞,眉间露一丝。
  • 相关阅读:
    P3332 [ZJOI2013]K大数查询
    树上最短路---------------树链剖分,优化建边。
    BZOJ_4386
    2016_1_13(3)
    2016_1_13(2)
    2016_1_13
    BZOJ_1698
    BZOJ_4152
    BZOJ_3110
    BZOJ_2141
  • 原文地址:https://www.cnblogs.com/L-Memory/p/9771505.html
Copyright © 2011-2022 走看看