zoukankan      html  css  js  c++  java
  • 2018/7/27 补了一点线段树、hack it QAQ...

    https://blog.csdn.net/yanhu6955/article/details/81217308

    为什么是素数:https://blog.csdn.net/qq_41608020/article/details/81213481

    https://www.cnblogs.com/tiberius/p/9375743.html

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int p = 47;
     5 const int N  = p * p;
     6 int ans[N + 5][N + 5];
     7 
     8 int main(){
     9     puts("2000");
    10     ///(p*p) * (p*p)   ->   0...p*p - 1 row(x)   +   (0...p-1),(p...2p-1),...  group(k = x / p)   ,   row -> i = 0...p-1 team(i).
    11     for(int x = 0; x < N; x++){///row
    12         int k = x / p;///k*i(offset->last row) 0...p-1|0, p...2p-1|2, 2p...3p-1|2, ...|(k=x/p).
    13         int b = x % p;
    14         for(int i = 0; i < p; i++){
    15             int y = i * p ///inline offset.
    16             + (k * i + b) % p;
    17             ans[x][y] = 1;
    18         }
    19     }
    20     for(int i = 0; i < 2000; i++){
    21         for(int j = 0; j < 2000; j++)
    22             printf("%d", ans[i][j]);
    23         puts("");
    24     }
    25     return 0;
    26 }
      1 ///4 ways to solve inv pair.
      2 ///https://blog.csdn.net/haolexiao/article/details/54989306
      3 
      4 #include <bits/stdc++.h>
      5 using namespace std;
      6 
      7 const int N = 1e5 + 5;
      8 int num[N];
      9 long long cnt;
     10 int temp[N];///
     11 void Merge(int left, int mid, int right)
     12 {
     13 ///int temp[N];///TLE
     14     int i = left, j = mid + 1, k = left;
     15     while(i <= mid&&j <= right)
     16     {
     17         if (num[i] > num[j])
     18         {
     19             cnt += mid - i + 1;
     20             temp[k++] = num[j++];
     21         }
     22         else
     23             temp[k++] = num[i++];
     24     }
     25     while (i <= mid) temp[k++] = num[i++];
     26     while (j <= right) temp[k++] = num[j++];
     27     for (i = left; i <= right; i++)
     28         num[i] = temp[i];
     29 }
     30 
     31 void mergeSort(int left, int right)
     32 {
     33     if (left < right)
     34     {
     35         int mid = (left + right) / 2;
     36         mergeSort(left, mid);
     37         mergeSort(mid + 1, right);
     38         Merge(left, mid, right);
     39     }
     40 }
     41 
     42 int main()
     43 {
     44     int n, x, y;
     45     while(~scanf("%d%d%d",&n, &x, &y))
     46     {
     47         for(int j = 0; j < n; j++)
     48             scanf("%d", &num[j]);
     49         cnt = 0;
     50         mergeSort(0, n-1);///
     51         long long ans=cnt*min(x,y);
     52         printf("%lld
    ", ans);
     53     }
     54     return 0;
     55 
     56 }
     57 /*#include<bits/stdc++.h>
     58 using namespace std;
     59 typedef long long ll;
     60 ll x,y,n;
     61 const int maxn= 500005;
     62 ll aa[maxn];//离散化后的数组
     63 ll c[maxn]; //树状数组
     64 
     65 struct Node
     66 {
     67     int v;
     68     int order;
     69 }a[maxn];
     70 
     71 bool cmp(Node a, Node b)
     72 {
     73     if(a.v == b.v) return a.order < b.order;
     74     ///if a.v == b.v, the order shouldn't be changed.WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaa!!!!!!!!!!!
     75     ///or
     76     return a.v < b.v;
     77 }
     78 
     79 int lowbit(int k)
     80 {
     81     return k&(-k);
     82 }
     83 
     84 void update(int t, int value)
     85 {
     86     int i;
     87     for (i = t; i <= n; i += lowbit(i))
     88         c[i] += value;
     89 }
     90 
     91 int getsum(int t)
     92 {
     93     int i, sum = 0;
     94     for (i = t; i >= 1; i -= lowbit(i))
     95         sum += c[i];
     96     return sum;
     97 }
     98 
     99 int main()
    100 {
    101     int i;
    102     while (scanf("%lld%lld%lld",&n,&x,&y)!=EOF)
    103     {
    104         for (i = 1; i <= n; i++)
    105         {
    106             scanf("%d", &a[i].v);
    107             a[i].order = i;
    108         }
    109         sort(a + 1, a + n + 1,cmp);
    110         memset(c, 0, sizeof(c));
    111         for (i = 1; i <= n; i++)
    112             aa[a[i].order] = i;
    113             ///right position.(make the same number's aa equal    or    if(a.v == b.v) return a.order < b.order;(cmp) ).
    114         ll ans = 0;
    115         for (i = 1; i <= n; i++)
    116         {
    117             update(aa[i], 1);
    118             ans += i - getsum(aa[i]);///
    119         }
    120         printf("%lld
    ",min(x, y)*ans);
    121     }
    122     return 0;
    123 }
    124 
    125 */
    126 /*
    127 #include <iostream>
    128 #include <stdio.h>
    129 #include <math.h>
    130 #include <string.h>
    131 #include <time.h>
    132 #include <stdlib.h>
    133 #include <string>
    134 #include <bitset>
    135 #include <vector>
    136 #include <set>
    137 #include <map>
    138 #include <queue>
    139 #include <algorithm>
    140 #include <sstream>
    141 #include <stack>
    142 #include <iomanip>
    143 using namespace std;
    144 #define pb push_back
    145 #define mp make_pair
    146 typedef pair<int,int> pii;
    147 typedef long long ll;
    148 typedef double ld;
    149 typedef vector<int> vi;
    150 #define fi first
    151 #define se second
    152 #define fe first
    153 #define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
    154 #define Edg int M=0,fst[SZ],vb[SZ],nxt[SZ];void ad_de(int a,int b){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;}void adde(int a,int b){ad_de(a,b);ad_de(b,a);}
    155 #define Edgc int M=0,fst[SZ],vb[SZ],nxt[SZ],vc[SZ];void ad_de(int a,int b,int c){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;vc[M]=c;}void adde(int a,int b,int c){ad_de(a,b,c);ad_de(b,a,c);}
    156 #define es(x,e) (int e=fst[x];e;e=nxt[e])
    157 #define esb(x,e,b) (int e=fst[x],b=vb[e];e;e=nxt[e],b=vb[e])
    158 #define VIZ {printf("digraph G{
    "); for(int i=1;i<=n;i++) for es(i,e) printf("%d->%d;
    ",i,vb[e]); puts("}");}
    159 #define VIZ2 {printf("graph G{
    "); for(int i=1;i<=n;i++) for es(i,e) if(vb[e]>=i)printf("%d--%d;
    ",i,vb[e]); puts("}");}
    160 #define SZ 666666
    161 //orz kczno1    POD only
    162 template<typename T>
    163 struct vec{T *a;int n;void clear(){n=0;}
    164 void pb(const T &x){if((n&-n)==n)a=(T*)realloc(a,(n*2)*sizeof(T));a[n++]=x;}
    165 inline T* begin(){return a;}inline T* end() {return a+n;}};
    166 int n,x,y,a[SZ],g[SZ],bs[SZ];
    167 void sol()
    168 {
    169     for(int i=1;i<=n;++i) bs[i]=0;///
    170     for(int i=1;i<=n;++i)
    171         scanf("%d",a+i),g[i]=a[i];
    172     sort(g+1,g+1+n);
    173     for(int i=1;i<=n;++i)
    174         a[i]=n+1-(lower_bound(g+1,g+1+n,a[i])-g);///the amount of a[j] | a[j]>=a[i];
    175         ///lower_bound!!!(better than sort + struct)
    176         //bool cmp(Node a, Node b){
    177         //if(a.v == b.v) return a.order < b.order;///if a.v == b.v, the order shouldn't be changed.WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaa!!!!!!!!!!!
    178         //return a.v < b.v;
    179         //}
    180     ll inv=0;
    181     for(int i=1;i<=n;++i)
    182     {
    183         for(int g=a[i]-1;g>=1;g-=g&-g) inv+=bs[g];///{1...cnt(>)}      direct child
    184         for(int g=a[i];g<=n;g+=g&-g) ++bs[g];///{cnt(>=a[i])...n}  ->  g is the direct inv(parent)(who should be smaller than "a[i]");
    185     }
    186     printf("%lld
    ",min(x,y)*inv);
    187 }
    188 int main()
    189 {
    190     while(scanf("%d%d%d",&n,&x,&y)!=EOF) sol();
    191 }
    192 
    193 */
    论逆序数的四种求法以及如何把归并排序写挫。。。

    HDU 6315

    http://www.cnblogs.com/tiberius/p/9369683.html

    超棒的思路:维护区间最小值min,以此为标准修改lazy标记,减少更新次数。理不好思路套板子分分钟tle而理直气壮.jpg...q^q...

  • 相关阅读:
    矩阵树(Matrix-Tree)定理精华
    【面试题flex】关于弹性盒子中 flex: 0 1 auto 的一系列问题
    纯函数-Javascript
    uniapp 低功耗蓝牙使用(经典蓝牙用native.js)
    uniapp截屏
    unicloud数据聚合处理
    uniapp的post请求失效问题
    unicloud链表查询
    uni-id的使用
    坐标转换
  • 原文地址:https://www.cnblogs.com/curieorz/p/9379867.html
Copyright © 2011-2022 走看看