UVA 12003 Array Transformer (分块)
2015-11-12 17:53
363 查看
题意:
给出数组A[1,2,...,n]和m条指令,每条指令形如(L,R,v,p)表示统计出A[L]...A[R]中严格小于v的有多少个,然后把A[p]修改成uk/(R−L+1)
分析:
分块暴力搞一搞,存一下原来的
代码:
给出数组A[1,2,...,n]和m条指令,每条指令形如(L,R,v,p)表示统计出A[L]...A[R]中严格小于v的有多少个,然后把A[p]修改成uk/(R−L+1)
分析:
分块暴力搞一搞,存一下原来的
代码:
// // Created by TaoSama on 2015-11-06 // Copyright (c) 2015 TaoSama. All rights reserved. // //#pragma comment(linker, "/STACK:1024000000,1024000000") #include <algorithm> #include <cctype> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iomanip> #include <iostream> #include <map> #include <queue> #include <string> #include <set> #include <vector> using namespace std; #define pr(x) cout << #x << " = " << x << " " #define prln(x) cout << #x << " = " << x << endl const int N = 3e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7; const int B = 1024; int n, q, u, a ; vector<int> b[505]; void update(int l, int r, int v, int p) { int i = l, j = r, cnt = 0; while(i <= j && i % B) if(a[i++] < v) ++cnt; while(i <= j && (j + 1) % B) if(a[j--] < v) ++cnt; while(i <= j) { int o = i / B; cnt += lower_bound(b[o].begin(), b[o].end(), v) - b[o].begin(); i += B; } a[p] = 1LL * u * cnt / (r - l + 1); int wh = p / B; for(int i = 0; i < b[wh].size(); ++i) b[wh][i] = a[wh * B + i]; sort(b[wh].begin(), b[wh].end()); } int main() { #ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin); // freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout); #endif ios_base::sync_with_stdio(0); while(scanf("%d%d%d", &n, &q, &u) == 3) { for(int i = 0; i <= n / B; ++i) b[i].clear(); for(int i = 0; i < n; ++i) { scanf("%d", a + i); b[i / B].push_back(a[i]); } for(int i = 0; i < n / B; ++i) sort(b[i].begin(), b[i].end()); while(q--) { int l, r, v, p; scanf("%d%d%d%d", &l, &r, &v, &p); update(l - 1, r - 1, v, p - 1); } for(int i = 0; i < n; ++i) printf("%d\n", a[i]); } return 0; }
相关文章推荐
- [BZOJ2038][2009国家集训队][莫队][分块]小z的袜子
- Codeforces538F A Heap of Heaps【分块+差分求前缀和】
- 大矩阵的分块乘法及matlab实现
- bzoj-2741 L
- bzoj-3585 mex
- 【Violet 6】【BZOJ2724】蒲公英
- [2009国家集训队]小Z的袜子(hose) 分块做法
- NBUT 1457 分块
- codeforces #307 E. GukiZ and GukiZiana (分块)
- Codeforces Round #307 (Div. 2)E. GukiZ and GukiZiana(分块)
- 【分块】 CF 551 E GukiZ and GukiZiana
- Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana (分块)
- Codeforces Gym 100589A Queries on the Tree(树状数组+分块)
- GFS中的数据完整性校验
- HDU 4676 Sum Of Gcd(欧拉函数求区间gcd之和+分块算法)
- Codeforces #307 (div2)
- CodeChef COUNTARI Arithmetic Progressions FFT + 分块
- Codeforces Gym 100589A Queries on the Tree 树状数组 + 分块
- codeforces 86D. Powerful array(分块)
- codechef November Challenge 2014 .Chef and Churu