解题报告
题意:
一根长度8000的线段上染色,求染完之后,每个颜色在线段上有多少个间断的区间。
思路:
区间问题用线段树,成段的更新区间,最后把所有的区间下压到叶子结点,统计叶子结点的颜色。
#include 
#include 
#include 
using namespace std;
int lz[32000],_hash[10000],color[10000],cnt;
v...
                            
                            
                                分类:
其他好文   时间:
2014-08-11 06:19:21   
                                阅读次数:
258
                             
                         
                    
                        
                            
                            
                                解题报告
题意:
求逆序数。
思路:
线段树离散化处理。
#include 
#include 
#include 
#include 
#define LL long long
using namespace std;
LL sum[2001000],num[501000],_hash[501000];
void push_up(int rt)
{
    sum[rt]=sum[rt...
                            
                            
                                分类:
其他好文   时间:
2014-08-11 00:22:01   
                                阅读次数:
255
                             
                         
                    
                        
                            
                            
                                解题报告
题目传送门
题意:
意思很好理解。
思路:
每次操作是100000次,数据大小100000,又是多组输入。普通模拟肯定不行。
线段树结点记录区间里存在数字的个数,加点删点操作就让该点个数+1,判断x存在就查询[1,x]区间的个数和[1,x-1]的个数。
求x之后第k大的数就先确定小于x的个数t,第t+k小的数就是要求的。
#include 
#include 
#incl...
                            
                            
                                分类:
其他好文   时间:
2014-08-10 21:34:50   
                                阅读次数:
303
                             
                         
                    
                        
                            
                            
                                解题报告
题意:
原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和。
思路:
线段树成段更新,区间去和。
#include 
#include 
#include 
using namespace std;
int sum[500000],lz[500000];
void push_up(int root,int l,int r)
{
    sum[root]=sum...
                            
                            
                                分类:
其他好文   时间:
2014-08-09 11:39:47   
                                阅读次数:
343
                             
                         
                    
                        
                            
                            
                                解题报告
题意:
略
思路:
线段树成段更新,区间求和。
#include 
#include 
#include 
#define LL long long
#define int_now int l,int r,int root
using namespace std;
LL sum[500000],lazy[500000];
void push_up(int root,int l,...
                            
                            
                                分类:
其他好文   时间:
2014-08-09 00:18:46   
                                阅读次数:
470
                             
                         
                    
                        
                            
                            
                                解题报告
题意:
略
思路:
单点更新,区间乘积。
#include 
#include 
#include 
#define LL long long
using namespace std;
LL mul[501000];
void update(int root,int l,int r,int p,int v)
{
    int mid=(l+r)/2;
    if(l==r)...
                            
                            
                                分类:
其他好文   时间:
2014-08-08 08:29:05   
                                阅读次数:
239
                             
                         
                    
                        
                            
                            
                                解题报告
题意:
求区间内最大值和最小值的差值。
思路:
裸线段树,我的线段树第一发。
#include 
#include 
#include 
#define  inf 99999999
#define LL long long
using namespace std;
LL minn[201000],maxx[201000];
void update(LL root,LL l,LL...
                            
                            
                                分类:
其他好文   时间:
2014-08-07 23:16:35   
                                阅读次数:
282
                             
                         
                    
                        
                            
                            
                                解题报告
题意:
略
思路:
线段树单点增减和区间求和。
#include 
#include 
#include 
#define LL long long
using namespace std;
int sum[201000];
void update(int root,int l,int r,int p,int v)
{
    int mid=(l+r)/2;
    if(l...
                            
                            
                                分类:
其他好文   时间:
2014-08-07 23:11:02   
                                阅读次数:
378
                             
                         
                    
                        
                            
                            
                                解题报告
题意:
略
思路:
单点替换,区间最值
#include 
#include 
#include 
#define inf 99999999
using namespace std;
int maxx[808000];
void  update(int root,int l,int r,int p,int v)
{
    int mid=(l+r)/2;
    if(l==...
                            
                            
                                分类:
其他好文   时间:
2014-08-07 23:09:25   
                                阅读次数:
256