Codeforces 915E Physical Education Lessons 各種資料結構維護
阿新 • • 發佈:2018-12-16
文章目錄
http://codeforces.com/contest/915/problem/E題意
題解
可以用權值線段樹瞎搞. 當然用某暴力資料結構珂朵莉樹也可以過啦. 每次動態維護答案,用合併區間,暴力拆開. 然後就過了. 珂朵莉樹的話全部都是基本操作,具體可以看洛谷上CF896C的題解.
#include<bits/stdc++.h> //Ithea Myse Valgulious
namespace chtholly{
typedef long long ll;
#define re0 register int
#define rel register ll
#define rec register char
#define gc getchar
//#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<23,stdin),p1==p2)?-1:*p1++)
#define pc putchar
#define p32 pc(' ')
#define pl puts("")
/*By Citrus*/
char buf[1<<23],*p1=buf,*p2=buf;
inline int read(){
int x=0,f=1;char c=gc();
for (;!isdigit(c);c=gc()) f^=c=='-';
for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');
return f?x:-x;
}
template <typename mitsuha>
inline bool read(mitsuha &x){
x=0;int f=1 ;char c=gc();
for (;!isdigit(c)&&~c;c=gc()) f^=c=='-';
if (!~c) return 0;
for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');
return x=f?x:-x,1;
}
template <typename mitsuha>
inline int write(mitsuha x){
if (!x) return 0&pc(48);
if (x<0) pc('-'),x=-x;
int bit[20],i,p=0;
for (;x;x/=10) bit[++p]=x%10;
for (i=p;i;--i) pc(bit[i]+48);
return 0;
}
inline char fuhao(){
char c=gc();
for (;isspace(c);c=gc());
return c;
}
}using namespace chtholly;
using namespace std;
struct chtholly_tree{
#define it set<node>::iterator
int sum;
struct node{
int l,r,val;
node(int nl,int nr=-1,int v=0):l(nl),r(nr),val(v){}
bool operator <(const node &b) const{
return l<b.l;
}
};
set<node> s;
it split(int pos) {
it p=s.lower_bound(node(pos));
if (p!=s.end()&&p->l==pos) return p; --p;
int nl=p->l,nr=p->r,v=p->val;
s.erase(p);
s.insert(node(nl,pos-1,v));
return s.insert(node(pos,nr,v)).first;
}
void assign(int l,int r,int v) {
it p,itr=split(r+1),itl=split(l);
for (p=itl;p!=itr;++p) sum-=(p->r-p->l+1)*p->val;
s.erase(itl,itr);
s.insert(node(l,r,v)),sum+=(r-l+1)*v;
}
void init(int n) {
sum=n;
s.insert(node(1,n,1));
}
}my_;
int main(){
int n=read(),q=read();
my_.init(n);
for (;q--;) {
int l=read(),r=read(),k=read()-1;
my_.assign(l,r,k),write(my_.sum),pl;
}
}
謝謝大家.