首页 > 其他 > 详细

Atcoder 杂题 round 1

时间:2021-02-21 00:02:33      阅读:28      评论:0      收藏:0      [点我收藏+]

目录:

abc190D

abc190F

abc192D

abc192E

abc192F


abc190D

可以发现存在负数的答案都是由一个不存在负数的答案推过来的,比如 [-2,-1,...,4,5] 就是由 [3,4,5] 推过来的,所以这一部分答案不用考虑

可以想到答案的区间个数和因子有关,又可以发现区间长度应当是个奇数

所以答案应当是他的奇素数个数

(abc190 题解鸽太久了有点记不清思路了(


 

abc190F

可以发现一次转换等于是在这个序列的末尾删一个元素,队首加一个元素,可以用树状数组维护逆序对来做这题

 1 #include <ctime>
 2 #include <cmath>
 3 #include <cctype>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <cstdlib>
 7 #include <iostream>
 8 #include <algorithm>
 9 #include <vector>
10 #include <queue>
11 #define inf 300010
12 #define INF 0x7fffffff
13 #define ll long long
14  
15 template <class I>
16 inline void read(I &num){
17     num = 0; char c = getchar(), up = c;
18     while(!isdigit(c)) up = c, c = getchar();
19     while(isdigit(c)) num = (num << 1) + (num << 3) + (c ^ 0), c = getchar();
20     up == - ? num = -num : 0; return;
21 }
22 template <class I>
23 inline void read(I &a, I &b) {read(a); read(b);}
24 template <class I>
25 inline void read(I &a, I &b, I &c) {read(a); read(b); read(c);}
26  
27 int n;
28 int a[inf];
29  
30 struct bitTree {
31     private:
32     int c[inf];
33     inline int lowbit(const int &x) {return x & (-x);}
34  
35     public:
36     inline void insert(int x, int k) {
37         ++x;
38         while(x <= n) {
39             c[x] += k;
40             x += lowbit(x);
41         }
42     }
43  
44     inline int query(int x) {
45         ++x; int res = 0;
46         while(x) {
47             res += c[x];
48             x -= lowbit(x);
49         }
50         return res;
51     }
52 };
53  
54 bitTree bt;
55 ll nx[inf], ans[inf];
56  
57 signed main(){
58     read(n);
59     for(int i = 1; i <= n; i++) read(a[i]);
60     for(int i = n; i; i--) {
61         nx[i] = bt.query(a[i]);
62         bt.insert(a[i], 1);
63     }
64     for(int i = 1; i <= n; i++) ans[0] += nx[i];
65     for(int i = 1; i < n; i++) {
66         ans[i] = ans[i - 1] - a[i] + (n - 1 - a[i]);
67     }
68     for(int i = 0; i < n; i++) printf("%lld\n", ans[i]);
69     return 0;
70 }

 

Atcoder 杂题 round 1

原文:https://www.cnblogs.com/Chiaro/p/problemset-atc-round1.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!