摘要:
水题~。 注意权值和可能会爆int。 const int N=1e5+10; int val[N]; LL sum[N]; int n; int maxd; void dfs(int u,int d) { if(u > n) return; maxd=max(maxd,d); sum[d]+=val 阅读全文
摘要:
贪心思路:每次将第$i$个位置上的数,与数字$i$所处的位置进行交换。重复这个操作,每次至少会将一个数字通过交换至归位,直到序列变为有序。 const int N=1e5+10; int a[N]; int n; int main() { cin>>n; for(int i=1;i<=n;i++) 阅读全文
摘要:
通过双指针维护$[T_i,T_i+D)$这段时间窗口内,每个日志出现的次数。 const int N=1e5+10; PII a[N]; int cnt[N]; int n,d,k; int main() { cin>>n>>d>>k; for(int i=0;i<n;i++) cin>>a[i]. 阅读全文
摘要:
扫描线。 我们取出$N$个矩形的左右边界。若一个矩形的两个对角顶点坐标为$(x_1,y_1)\(和\)(x_2,y_2)\(,则左边界记为四元组\)(x_1,y_1,y_2,1)\(,右边界记作四元组\)(x_2,y_1,y_2,-1)。把这$2N$个四元组按照$x$递增排序。 逐一扫描排序后的$2 阅读全文
摘要:
只通过比较和交换相邻两个数值的排序方法,实际上就是冒泡排序。在排序过程中每找到一对大小颠倒的相邻数值,把它们交换,就会使整个序列的逆序对个数减少$1$。最终排好序后的逆序对个数显然为$0$,所以对序列进行冒泡排序需要的最少交换次数就是序列中逆序对的个数。 本题要求计算出所有小朋友的不高兴程度之和,所 阅读全文