码迷,mamicode.com
首页 > 其他好文 > 详细

2018/7/27 补了一点线段树、hack it QAQ...

时间:2018-07-27 23:12:59      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:void   turn   eof   opened   ==   ber   row   update   sam   

 

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\n", 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\n",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{\n"); for(int i=1;i<=n;i++) for es(i,e) printf("%d->%d;\n",i,vb[e]); puts("}");}
159 #define VIZ2 {printf("graph G{\n"); for(int i=1;i<=n;i++) for es(i,e) if(vb[e]>=i)printf("%d--%d;\n",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\n",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...

 

2018/7/27 补了一点线段树、hack it QAQ...

标签:void   turn   eof   opened   ==   ber   row   update   sam   

原文地址:https://www.cnblogs.com/curieorz/p/9379867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!