zoukankan      html  css  js  c++  java
  • P1083 借教室 二分 + 差分数组

    经典题

    二分 + 前缀和

    注意long long 和初始化change[]      //QAQ

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 #define ll long long   //注意long long
     6 
     7 using namespace std;
     8 const int N = 1000000 + 5;
     9 ll n,m;
    10 ll d[N],sum[N],c[N],a[N],b[N],change[N];
    11 bool bo;
    12 bool check(ll x){ 13 memset(change,0,sizeof(change)); //注意初始化QAQ 14 for(int i = 1;i <= x;++ i){ 15 change[a[i]] += c[i]; 16 change[b[i] + 1] -= c[i]; 17 } 18 ll sum = 0; 19 for(int i = 1;i <= n;++ i){ 20 sum += change[i]; 21 if(sum > d[i]) return true; 22 } 23 return false; 24 } 25 int main(){ 26 scanf("%lld%lld",&n,&m); 27 for(int i = 1;i <= n;++ i){ 28 scanf("%lld",&d[i]); 29 } 30 for(int i = 1;i <= m;++ i){ 31 scanf("%lld%lld%lld",&c[i],&a[i],&b[i]); 32 } 33 ll l = 0,r = m; // l :不可能,r:可能 34 while(r - l > 1){ 35 ll mid = (l + r) >> 1; 36 if(check(mid)){ 37 r = mid; 38 bo = 1; //有输出的可能值 39 } 40 else{ 41 l = mid; 42 } 43 } 44 if(bo){ 45 cout << "-1" << ' '; 46 cout << r << ' '; //输出可能值r 47 } 48 else{ 49 cout << "0" << ' '; 50 } 51 return 0; 52 }
  • 相关阅读:
    字符串的全排列

    链表
    青蛙跳一格或者两格,n格跳法
    二叉树
    Concurrent实现原理
    sql语句总结 (转) http://blog.csdn.net/fengfeng91/article/details/15029173
    ArrayList实现原理
    java虚拟机 内存分配
    【转】关于Quartus ii无法识别Modelsim路径的问题
  • 原文地址:https://www.cnblogs.com/Loizbq/p/7631877.html
Copyright © 2011-2022 走看看