qscoj 66 ||2017 UESTC Training for Data Structures D(离线+树状数组)
2017-04-30 21:27
399 查看
1.qscoj 66
离线+树状数组。
询问,如果只有A数组的话,实际上就是权值线段树或者主席树的裸题了。
那么我们其实只要将询问按照A数组从小到大排序,然后依次删除对于>A不合法的,然后用个权值树状数组去查询,就可以了。
代码:
2017 UESTC Training for Data Structures D
做法同上题
离线+树状数组。
询问,如果只有A数组的话,实际上就是权值线段树或者主席树的裸题了。
那么我们其实只要将询问按照A数组从小到大排序,然后依次删除对于>A不合法的,然后用个权值树状数组去查询,就可以了。
代码:
#include <bits/stdc++.h> using namespace std; #define ff first #define ss second #define pb push_back #define ll long long #define mod 1000000007 #define ull unsigned long long #define min3(a, b, c) min(a, min(b, c)) #define max3(a, b, c) max(a, max(b, c)) #define mst(ss,b) memset(ss,b,sizeof(ss)); #define dbg(x) cout << #x << "= " << x << endl; typedef pair <int, int> pii; const int inf = 0x3f3f3f3f; const ll INF = (1LL<<63)-1; const int N = 1e5+5; int n, Q; pair<int, int>a ; struct node{ int x, y, id; bool operator < (const node& rhs)const { return x < rhs.x; } }q ; int ans ; struct BIT{ int n; ll c ; void init(int _n){ n = _n; for(int i=1; i<=n; i++)c[i] = 0; } void update(int p, int x){ for(int i=p; i<=n; i+=i&-i)c[i] += x; } int query(int p){ int ret = 0; for(int i=p; i>0; i-=i&-i)ret += c[i]; return ret; } }bit; int main(){ while(~scanf("%d%d", &n, &Q)){ int tol = 0; mst(ans, 0); bit.init(n); for(int i=1; i<=n; i++)scanf("%d", &a[i].ff); for(int i=1; i<=n; i++){ scanf("%d", &a[i].ss); tol++; bit.update(a[i].ss, 1); } for(int i=1; i<=Q; i++){ scanf("%d%d", &q[i].x, &q[i].y); q[i].id = i; } sort(a+1, a+1+n); sort(q+1, q+1+Q); int now = 1; for(int i=1; i<=Q; i++){ while(now <= n && a[now].ff < q[i].x){ bit.update(a[now].ss, -1); tol--; now++; } ans[q[i].id] = tol-bit.query(q[i].y-1); } for(int i=1; i<=Q; i++)printf("%d\n", ans[i]); } return 0; }
2017 UESTC Training for Data Structures D
做法同上题
#include <set> #include <map> #include <stack> #include <queue> #include <string> #include <vector> #include <math.h> #include <time.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> #include <algorithm> using namespace std; #define ff first #define ss second #define pb push_back #define ll long long #define mod 1000000007 #define ull unsigned long long #define min3(a, b, c) min(a, min(b, c)) #define max3(a, b, c) max(a, max(b, c)) #define mst(ss,b) memset(ss,b,sizeof(ss)); #define dbg(x) cout << #x << "= " << x << endl; typedef pair <int, int> pii; const int inf = 0x3f3f3f3f; const ll INF = (1LL<<63)-1; const int N = 1e5+5; pii a ; struct node{ int x, y, id; bool operator < (const node& rhs)const{ return x < rhs.x; } }q ; struct BIT{ int n; ll c ; void init(int _n){ n = _n; for(int i=1; i<=n; i++)c[i] = 0; } void update(int p, int x){ for(int i=p; i<=n; i+=i&-i)c[i] += x; } int query(int p){ int ret = 0; for(int i=p; i>0; i-=i&-i)ret += c[i]; return ret; } }bit; int cnt , ans ; int main(){ int n; scanf("%d", &n); bit.init(n); mst(cnt, 0); mst(ans, 0); for(int i=1; i<=n; i++){ scanf("%d%d", &a[i].ff, &a[i].ss); bit.update(a[i].ss, 1); q[i].x = a[i].ff, q[i].y = a[i].ss; q[i].id = i; } sort(a+1, a+1+n); sort(q+1, q+1+n); int now = n; for(int i=n; i>=1; i--){ while(now >= 1 && a[now].ff > q[i].x){ bit.update(a[now].ss, -1); now--; } ans[q[i].id] = bit.query(q[i].y)-1; } // for(int i=1; i<=n; i++)dbg(ans[i]); for(int i=1; i<=n; i++)cnt[ans[i]]++; for(int i=1; i<=n; i++)printf("%d\n", cnt[i-1]); return 0; }
相关文章推荐
- 2016 UESTC Training for Data Structures K - 郭大侠与甲铁城 树状数组+离线操作
- 2016 UESTC Training for Data Structures K - 郭大侠与甲铁城 CDOJ 1342 离线树状数组
- 2017 UESTC Training for Data Structures
- CDOJ-1592 (2017 UESTC Training for Data Structures B)
- CDOJ1600-矩形切割 (2017 UESTC Training for Data Structures P)
- CDOJ1598-线段树合并(2017 UESTC Training for Data Structures G)
- CDOJ1601 - 二维树状数组 (2017 UESTC Training for Data Structures)
- 2016 UESTC Training for Data Structures O - 卿学姐种美丽的花 树状数组+等差数列
- CDOJ1583-树状数组 (2017 UESTC Training for Data Structures)
- CDOJ1590-dfs+树链剖分(2017 UESTC Training for Data Structures O)
- 【UESTC】2015 UESTC Training for Data Structures
- 2016 UESTC Training for Data Structures
- 2016 UESTC Training for Data Structures D - 卿学姐与魔法 优先队列、构造
- 2016 UESTC Training for Data Structures R - Japan 树状数组求逆序数
- 2016 UESTC Training for Data Structures E - 卿学姐与城堡的墙 CDOJ 1341 树状数组 逆序对 离散化
- 2016 UESTC Training for Data Structures M - 卿学姐失恋了Ⅱ CDOJ 1350 汉诺塔 模拟
- 2015 UESTC Training for Data Structures 秋实大哥下棋
- UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>
- UESTC_秋实大哥下棋 2015 UESTC Training for Data Structures<Problem I>
- UESTC Training for Data Structures——E