考慮線段樹分治。區間[l,r]裡的貢獻分為 1、l~mid的貢獻。2、r~mid的貢獻。3、經過mid的貢獻。對於第三種我們在維護當前區間的時候就可以直接for整個區間計算得到。前面兩種通過遞迴繼續計算。線段樹正好是儲存分治的過程。
#include #include #include #include #include #include #include #include #include #include #define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000007
using namespace std;
const int maxn = 51111;
const int inf = 0x3f3f3f3f;
const double eps = 1e-6;
const int maxn=100010;
typedef long long ll;
char s[maxn];
struct seg
tree[maxn<<2];
ll ans=0;
void build(int rt,int l,int r)
}for(int i=mid+1;i<=r;i++)
}build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
}void update(int rt,int pos,int val)
else
}int main()
return 0;
}
按位考慮,對於第k位的貢獻是[l1,r1]區間裡在第k位為1的數的數量*區間[l2,r2]裡第k位為0的數的數量+[l1,r1]裡第k位為0的數的數量*[l2,r2]裡第k位為1的數的數量,這個結果在乘2的k次方就是所有數在第k位的貢獻。找數的數量可以數字dp。(取模要注意,很容易錯)
#include #include #include #include #include #include #include #include #include #include #define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000007
using namespace std;
const int maxn = 51111;
const int inf = 0x3f3f3f3f;
const double eps = 1e-6;
const int maxn=100010;
typedef long long ll;
ll dp[100][70][2];
int a[100];
ll dfs(int pos,bool limit,int k,bool flag)
ll divs(ll x,int k)
ll inv(ll x,ll md)
return ans;
}int main()
ll res=ans*inv(((r1-l1)%mod)*((r2-l2)%mod)%mod,mod)%mod;
printf("%lld\n",res);
}return 0;
}
圖的點數最多是200,那麼一次最長的步長就是200,每次應該都是可以從前200個點裡轉移過來的。小於200時dp[i]初始化為-inf是為了防止有些點是走不到的,不能從**轉移過來。
#include #include #include #include #include #include #include #include #include #include #define ll long long
#define inf 0x3f3f3f3f
#define mod 1000000007
using namespace std;
const int maxn = 51111;
const int inf = 0x3f3f3f3f;
const double eps = 1e-6;
const int maxn=100010;
typedef long long ll;
int dist[110][110];
ll dp[maxn];
ll premax=0;
struct node
a[maxn];
int main()
}for(int i=1;i<=m;i++)
for(int k=1;k<=n;k++)}}
int k;
scanf("%d",&k);
for(int i=1;i<=k;i++) scanf("%lld %d %lld",&a[i].ti,&a[i].pi,&a[i].val);
sort(a+1,a+k+1,(const node &a,const node &b)
else dp[i]=-inf;
for(int j=1;j<=200&&i-j>=0;j++)
ans=max(ans,dp[i]);
}printf("%lld\n",ans);
return 0;
}
2020牛客寒假演算法基礎集訓營
長期更新,補完為止 2 g 判正誤 題意 t組資料。判斷a d b e c f是否等於g。1e9 a,b,c,g 1e9,0 d,e,f 1e9。保證不會出現指數和底數同為 0 的情況。思路 硬算會tle或mle。快速冪取模,為了增加過題概率,多取幾個模數判斷。includeusing namesp...
2020牛客寒假演算法基礎集訓營1
找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...
2020牛客寒假演算法基礎集訓營1
h題 突然發現h題可以用好多種方法做的。方法一 雙指標,維護乙個修改次數小於等於k的區間 include using namespace std typedef long long ll const int mod 1e9 7 const int n 1e5 5 const int inf 0x3f...